use*_*104 5 android android-ndk
我正在尝试从另一个目录包含我的 .so 库。编译我的项目工作正常。但是当我运行它时,它给了我
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip 文件“/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']
}
}
Run Code Online (Sandbox Code Playgroud)
两者都尝试过
jniLibs.srcDirs = ['C:\\svn\\sys_libs']
Run Code Online (Sandbox Code Playgroud)
和
jniLibs.srcDirs = ['C:/svn/sys_libs']
Run Code Online (Sandbox Code Playgroud)
实际上如何将其指向 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})
Run Code Online (Sandbox Code Playgroud)
这是我的 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']
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,您已经安装了 NDK r17 和 Android 插件 v.3.1.0 或更高版本(我们在已发布的 build.gradle 片段中没有看到这一点)。
但是您将abiFilters设置为armeabi
,该值已被删除。您应该将其设置为armeabi-v7a
,并确保它libtheprebuiltlib.so
也是为此 ABI 构建的,或者您可以下载旧版本的 NDK并在 build.gradle 依赖项集中设置
classpath 'com.android.tools.build:gradle:3.0.1'
Run Code Online (Sandbox Code Playgroud)
armeabi
如果明确设置,您可以强制使用最新的插件句柄:
android {
defaultConfig {
ndk {
abiFilters 'armeabi'
}
}
}
Run Code Online (Sandbox Code Playgroud)
(在您的脚本中,它位于android.defaultConfig.externalNativeBuild.ndk下,因此没有效果)。
你的build.gradle中有一个错误,它应该是
android {
sourceSets {
main {
jniLibs.srcDir 'C:/svn/sys_libs'
}
}
}
Run Code Online (Sandbox Code Playgroud)
当你有文件时C:\svn\sys_libs\armeabi\libtheprebuiltlib.so
。但这并不能解释为什么cmake不能按预期工作。
归档时间: |
|
查看次数: |
3883 次 |
最近记录: |