我正试图把我的.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]]]找不到“libtheprefitlib.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的毕业设置:
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
}
ndk {
abiFilters 'armeabi'
}
}
...
}
...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
sourceSets {
main {
jniLibs.srcDirs = ['C:/svn/sys_libs']
}
}
}
最佳答案
显然,你已经安装了ndk r17和android插件v.3.1.0或更高版本(我们在build.gradle的发布片段中没有看到这一点)。
但您将abifilters设置为armeabi
,它已被删除。您应该将其设置为armeabi-v7a
,并确保libtheprebuiltlib.so
也是为此abi构建的,或者您可以download an older version of NDK和in build.gradle dependencies set
classpath 'com.android.tools.build:gradle:3.0.1'
如果显式设置最新的插件句柄,则可以强制它:
android {
defaultConfig {
ndk {
abiFilters 'armeabi'
}
}
}
(在您的脚本中,它位于android.defaultconfig.externalnativebuild.ndk下,因此不起作用)。
你的建筑有一个错误,格雷德,应该是
android {
sourceSets {
main {
jniLibs.srcDir 'C:/svn/sys_libs'
}
}
}
当你有文件
armeabi
时。但这并不能解释为什么cmake不能像预期的那样工作。