【发布时间】:2018-06-06 06:51:24
【问题描述】:
我正在尝试从另一个目录中包含我的 .so 库。编译我的项目工作正常。但是当我运行它时,它给了我
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.company.gimikapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com. company.gimikapp-2/lib/arm, /vendor/lib, /system/lib]]] 找不到“libtheprebuiltlib.so”
我在 SO 中看到的常见解决方案是这样的:
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
都试过了
jniLibs.srcDirs = ['C:\\svn\\sys_libs']
和
jniLibs.srcDirs = ['C:/svn/sys_libs']
您实际上如何将它指向您的 Android 项目之外的另一个目录?
这是我的 CMakeList.txt:
cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
SHARED
src/main/cpp/source/native-lib.cpp )
add_library(theprebuiltlib SHARED IMPORTED)
set_target_properties(theprebuiltlib PROPERTIES IMPORTED_LOCATION
C:/svn/sys_libs/libtheprebuiltlib.so)
target_include_directories(
native-lib PRIVATE
src/main/cpp/source/
C:/svn/sys_includes/)
find_library( log-lib
log)
target_link_libraries( native-lib
theprebuiltlib
${log-lib})
这是我的 JNI 的 gradle 设置:
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
}
ndk {
abiFilters 'armeabi'
}
}
...
}
...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
sourceSets {
main {
jniLibs.srcDirs = ['C:/svn/sys_libs']
}
}
}
【问题讨论】:
-
检查这个解决方案medium.com/mobiwise-blog/…
-
medium.com 链接讨论了 .so 在 android 项目中时的解决方案。我的在项目之外,特别是在 C:/svn/sys_libs/
-
让我们尝试从 build.gradle 中删除
jniLibs设置,并检查 APK 的变化情况。顺便说一句,您启动 cmake 的部分可能不正确,也请在此处发布。 -
已添加。希望它可以帮助你帮助我。 :)
标签: android android-ndk