Android Native库加载失败求助:Gradle配置及.so文件路径问题
无法加载Native库的解决思路
1. 修正sourceSets配置
你之前找到的配置存在路径错误(你的libs目录与build.gradle同级,而非/src/main/libs)和语法问题(Groovy赋值需使用=)。修改后的配置如下:
android { // 保留原有其他配置... sourceSets { main { jni.srcDirs = [] // 禁用自动JNI编译逻辑 jniLibs.srcDirs = "$projectDir/libs" // 指定预编译so文件的目录 } } }
2. 移除冲突的CMake编译配置
你的build.gradle中配置了externalNativeBuild通过CMake编译JNI目标,但你实际使用的是预编译的.so文件,二者会产生冲突。若不需要编译JNI代码,直接移除以下配置块:
// 移除defaultConfig内的externalNativeBuild // defaultConfig { // // ...其他配置 // externalNativeBuild { // cmake { // targets += "MyLibs1_jni" // targets += "MyLibs2_jni" // targets += "MyLibs3_jni" // } // } // } // 移除根节点的externalNativeBuild // externalNativeBuild { // cmake { // path = project.file("cmakelists/gradle/CMakeLists.txt") // version = "3.19.0+" // } // }
3. 检查.so文件的目录结构
确保libs目录下按ABI架构分类存放so文件,正确结构示例:
libs/ ├── arm64-v8a/ │ ├── libMyLibs1_jni.so │ ├── libMyLibs2_jni.so │ └── libMyLibs3_jni.so └── armeabi-v7a/ ├── libMyLibs1_jni.so ├── libMyLibs2_jni.so └── libMyLibs3_jni.so
未按ABI分类的so文件,Gradle无法正确识别并打包到对应架构的安装包中。
4. 确认加载库的代码正确性
加载Native库时需去掉lib前缀和.so后缀,示例代码:
// 正确写法 System.loadLibrary("MyLibs1_jni") // 错误写法:不要添加lib前缀或.so后缀 // System.loadLibrary("libMyLibs1_jni.so")
内容的提问来源于stack exchange,提问作者Pp1
相关产品推荐
相关产品推荐

