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

Android Studio添加.so文件遇UnsatisfiedLinkError问题求助

解决Android Studio中JNI UnsatisfiedLinkError问题

你遇到的java.lang.UnsatisfiedLinkError是典型的JNI链接错误,意味着虚拟机找不到ActivateLibrary这个原生方法的实现。咱们从几个关键方向排查解决:

1. 确认.so文件中的函数签名完全匹配

错误提示里明确说找不到Java_com_getmagnet_App_MR_ActivateLibrary和Java_com_getmagnet_App_MR_ActivateLibrary__Ljava_lang_String_2这两个符号,这说明你的.so文件里没有和Java端方法完全匹配的原生函数。

  • 你可以用工具检查.so文件的符号表:

    • 在Linux/macOS下,使用命令:nm -D MirrorRealitySDK.so | grep ActivateLibrary
    • 确认输出中存在正确的函数签名,注意包名、类名、方法名的大小写,以及参数的JNI类型签名(String对应Ljava/lang/String;,所以带参数的签名应该是Java_com_getmagnet_App_MR_ActivateLibrary__Ljava_lang_String_2)。
  • 原生代码中的函数必须严格遵循JNI规范,比如:

JNIEXPORT jint JNICALL Java_com_getmagnet_App_MR_ActivateLibrary(JNIEnv* env, jclass clazz, jstring licenseKey) {
    // 你的实现逻辑
}

要保证返回类型是jint(对应Java的int),参数顺序是JNIEnv*、jclass(因为是静态方法)、jstring,缺一不可。

2. 检查.so文件的加载逻辑与存在性

你的MR类中加载了三个库,要确保:

  • 加载顺序正确:stlport_shared和fsdk是MirrorRealitySDK的依赖库,必须先加载依赖库再加载主库,当前的顺序是对的,但要确认这些库都存在于对应ABI目录(jniLibs/armeabi-v7a和jniLibs/x86)中。
  • 测试设备的CPU架构是否匹配:如果你的测试设备是arm64-v8a架构,只提供armeabi-v7a的.so可能会有兼容问题,可以在build.gradle中指定支持的ABI:
android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'x86'
        }
    }
}

3. 简化Gradle配置,避免打包问题

你当前的Gradle配置把.so打包成jar,这其实是不必要的——Android Studio默认会自动识别src/main/jniLibs目录下的.so文件并打包到APK中。建议:

  • 移除你添加的以下Gradle代码:
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    from fileTree(dir: 'libs', include: '**/*.so')
    into 'lib/'
}
tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) }
  • 如果你的.so文件不在默认的src/main/jniLibs目录,只需在build.gradle中指定路径即可:
android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs'] // 替换成你的.so实际存放目录
        }
    }
}

4. 清理缓存并重建项目

有时候Android Studio的缓存会导致异常,执行以下步骤:

  • 点击菜单栏 Build -> Clean Project
  • 然后点击 Build -> Rebuild Project
  • 也可以手动删除项目根目录下的build文件夹,再重新构建。

5. 验证APK中的.so文件是否正确打包

解压生成的APK文件,查看lib目录下的对应ABI文件夹(比如lib/armeabi-v7a),确认stlport_shared.so、fsdk.so、MirrorRealitySDK.so这三个文件都存在且完整。

内容的提问来源于stack exchange,提问作者WalksAway

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:51:22