Android NDK包括第三方预建共享库,包含Gradle和CMake

时间:2017-06-14 17:22:39

标签: android android-ndk cmake android-gradle

我努力在我的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目录并手动复制共享库的{armabi-v7a版本libusb1.0.so

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

1 个答案:

答案 0 :(得分:0)

尝试一下此方法,而不是尝试使用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})
相关问题