【问题标题】:Android NDK including a 3rd party prebuilt shared library with Gradle and CMakeAndroid NDK,包括带有 Gradle 和 CMake 的第 3 方预构建共享库
【发布时间】:2017-06-14 17:22:39
【问题描述】:

我正在努力在我的 android 项目中包含一个预构建的共享库

有问题的库是 libusb,我的 android 项目的 NDK 部分需要它。

一切都在编译和链接正常,即项目正在成功构建,但是在我的设备上安装 apk 时,应用程序崩溃了。

来自监视器的相关错误消息是:

java.lang.UnsatisfiedLinkError: dlopen failed: library "libusb1.0.so" not found

到目前为止,我尝试将以下内容添加到我的 app/build.gradle:

sourceSets{
    main {
        // let gradle pack the shared library into apk
        jniLibs.srcDirs = '/home/me/third-party/libusb-1.0.21/android/libs/'
    }

在我添加的 CMakeLists.txt 中:

set(libusb_DIR $ENV{HOME}/third-party/libusb-1.0.21/android/libs)
set(libusb_LIB usb1.0)

link_directories( ${libusb_DIR}/${ANDROID_ABI}/ )
target_link_libraries( ${libusb_LIB} )

我什至尝试创建一个app/src/main/jniLibs 目录并在其中手动复制共享库的 armeabi-v7a 版本 libusb1.0.so

安装 apk 后,Monitor 中仍然收到相同的错误消息..

【问题讨论】:

  • 你应该检查libusb1.0.so是否被打包到APK中。 Android Studio 提供了一个工具来分析 APK 并查看其内容。
  • 我已经在stackoverflow.com/questions/9870435/… 展示了如何做到这一点,我已经在这里回答了,但它被删除了。

标签: android android-ndk cmake android-gradle-plugin


【解决方案1】:

试试这个,而不是从 env 中获取路径,你应该尝试 ${CMAKE_SOURCE_DIR}

set(usb_DIR ${CMAKE_SOURCE_DIR}/../../../../libs)
add_library(libusb SHARED IMPORTED)
set_target_properties(libusb PROPERTIES IMPORTED_LOCATION
    ${usb_DIR}/libs/${ANDROID_ABI}/libusb1.0.so)

target_link_libraries(${libusb})

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 2011-07-15
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2014-03-22
    • 2016-06-07
    相关资源
    最近更新 更多