Android项目加载libtriangulation.so报错UnsatisfiedLinkError求助
解决libtriangulation.so加载失败的问题
检查ABI兼容性
- 确认
libtriangulation.so所在的ABI子目录(如armeabi-v7a、arm64-v8a、x86等)和当前测试设备/模拟器的ABI匹配。旧项目通常只编译了少数ABI,而Android Studio Electric Eel默认的ABI过滤规则更严格,容易出现不匹配情况。 - 打开3dViewer模块的Module级
build.gradle,检查ndk的abiFilters配置是否和.so所在目录对应:android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a' // 替换为你的.so实际支持的ABI } } }
验证jniLibs路径与结构
- 确认模块的
build.gradle中正确配置了jniLibs路径,默认路径为src/main/jniLibs,如果.so存放在其他路径,需手动指定:android { sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] // 路径需与实际存放位置一致 } } } - 检查目录结构:必须为
jniLibs/[ABI]/libtriangulation.so,不能直接将.so放在jniLibs根目录下,否则Android Studio无法识别。
清理重建项目与缓存
- 执行
Build > Clean Project,再执行Build > Rebuild Project,同时手动删除app/build和3dViewer/build目录,避免缓存干扰。 - 重启Android Studio,若使用模拟器,可清除模拟器缓存:
设置 > 系统 > 高级 > 重置选项 > 清除所有数据(恢复出厂设置)。
检查依赖与主项目配置
- 若3dViewer作为模块依赖导入主项目,确认主项目的
build.gradle中正确引入该模块:dependencies { implementation project(':3dViewer') } - 主项目的ABI配置需与3dViewer模块保持一致,否则主项目可能过滤掉模块支持的ABI,导致.so未被打包进APK。
确认.so文件完整性
- 使用
file命令(Linux/macOS)检查.so文件是否为对应ABI的有效ELF文件:file libtriangulation.so - 若文件损坏,替换为完整有效的.so文件。
临时排查:手动加载全路径
- 可尝试通过绝对路径加载.so,确认文件是否在正确位置:
注:此方法仅用于排查问题,不建议用于正式环境。static { try { File soFile = new File(getApplicationContext().getApplicationInfo().nativeLibraryDir, "libtriangulation.so"); System.load(soFile.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

