You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:42:45