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

Android APK外部安装启动失败报UnsatisfiedLinkError问题求助

问题:外部安装APK启动失败,报UnsatisfiedLinkError错误

通过Android Studio直接安装的应用可正常运行,但手动安装外部APK包时无法启动,Logcat输出错误如下:

FATAL EXCEPTION: main
Process: com.acme.someprogram, PID: 3806
java.lang.UnsatisfiedLinkError: Can't obtain peer field ID for class com.sun.jna.Pointer
   at com.sun.jna.Native.initIDs(Native Method)
   at com.sun.jna.Native.<clinit>(SourceFile:726)
   at com.sun.jna.Native.r(SourceFile:1)
   at org.vosk.LibVosk.<clinit>(SourceFile)
   at org.vosk.LibVosk.vosk_set_log_level(Native Method)
   at net.acme.someprogram.MainActivity.onCreate(SourceFile:272)
   at android.app.Activity.performCreate(Activity.java:6720)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2622)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2730)
   at android.app.ActivityThread.-wrap12(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1481)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6145)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

项目的Gradle应用脚本如下:

plugins {
id 'com.android.application'
}

android {
compileSdk 31

defaultConfig {
    applicationId "com.acme.someprogram"
    minSdk 24
    targetSdk 31
    versionCode 19
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
    viewBinding true
}
}

dependencies {
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'net.java.dev.jna:jna:5.8.0@aar'
implementation group: 'com.alphacephei', name: 'vosk-android', version: '0.3.32+'
implementation project(':models')
}

解决方案

  • 添加混淆规则:打开项目中的proguard-rules.pro文件,加入以下规则,防止JNA和Vosk的类/成员被混淆:

    -keep class com.sun.jna.** { *; }
    -keepclassmembers class com.sun.jna.** { *; }
    -keep class org.vosk.** { *; }
    -keepclassmembers class org.vosk.** { *; }
    

    原因:JNA和Vosk依赖反射与Native层交互,混淆会破坏类名、字段名的映射,导致Native层无法找到对应的Java类字段。

  • 验证混淆是否为问题根源:临时修改build.gradle中release构建类型的minifyEnabled为false,重新生成APK并安装。如果应用能正常启动,即可确认是混淆规则缺失导致的问题。

  • 重新构建签名APK:完成混淆规则添加后,通过Build -> Generate Signed Bundle/APK生成新的签名安装包,再测试外部安装启动情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:37