我正在尝试使用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中获取库。