如何使用CMake在NDK中包括预构建的共享库?

时间:2019-12-08 18:23:59

标签: android cmake android-ndk shared-libraries

我正在尝试使用CMake在我的android应用中使用预构建的共享库。我有一个看起来像这样的源代码树(仅包括相关部分):

app
 |-- build.gradle
 |
 |-- libs
 |    |-- arm64-v8a
 |    |    |-- libexternal.so
 |    |
 |    |-- x86_64
 |         |-- libexternal.so
 |
 |-- src
      |-- main
           |-- cpp
                |-- CMakeLists.txt

我将此添加到了CMakeLists.txt

set( external_DIR ${CMAKE_SOURCE_DIR}/../../../libs)
add_library( libexternal SHARED IMPORTED )
set_target_properties( libexternal
        PROPERTIES IMPORTED_LOCATION
        ${external_DIR}/${ANDROID_ABI}/libexternal.so )

... stuff the creates shared myapp from project files

target_link_libraries(myapp
    libexternal
    android
    native_app_glue
    ${log-lib})

并将其发送到build.gradle

android {
...
    defaultConfig {
        ndk {
            abiFilters 'arm64-v8a', 'x86_64'
        }
        ...
    }
    ...
    sourceSets {
        main {
            // let gradle pack the shared library into apk
            jniLibs.srcDirs = ['libs/']
        }
    }
}

当我使用手机从Android Studio运行此程序时,它因以下错误而崩溃:

2019-12-08 21:17:10.920 28951-28951/com.example.<app-name> E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.<app-name>, PID: 28951
    java.lang.UnsatisfiedLinkError: Unable to load native library "/data/app/com.example.<app-name>-MNTQOYsTwhDHYCzD7w_eWQ==/lib/arm64/libmyapp.so": dlopen failed: library "<path-to-project>/app/src/main/cpp/../../../libs/arm64-v8a/libexternal.so" not found

似乎手机上的应用正在尝试从我计算机中的路径而不是从APK中获取库。

0 个答案:

没有答案