java.lang.UnsatisfiedLinkError: Couldn't load XXX

        这是一种很常见的Android apk中jni的.so加载错误。本人遇到的这个情况比较特殊,现象如下:安装apk,然后重启设备,利用am startservice -a命令启动apk,都会出现该错误。重新安装apk,不重启设备,直接运行启动命令,可以正常启动运行。

        于是,将设备重启后的所有log都打出来,发现如下异常:

E/AndroidRuntime( 3207): java.lang.UnsatisfiedLinkError: Couldn't load alta_audio_system from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/system/app2/ExAudioPolicyService-release.apk"],nal
E/AndroidRuntime( 3207):        at java.lang.Runtime.loadLibrary(Runtime.java:358)
E/AndroidRuntime( 3207):        at java.lang.System.loadLibrary(System.java:526)
E/AndroidRuntime( 3207):        at com.alta.exaudiopolicy.engine.AudioSystem.<clinit>(Unknown Source)
E/AndroidRuntime( 3207):        at com.alta.exaudiopolicy.effect.VolumeStreamState.<init>(Unknown Source)
E/AndroidRuntime( 3207):        at com.alta.exaudiopolicy.engine.AudioPolicyEngine.createStreamStates(Unknown Source)
E/AndroidRuntime( 3207):        at com.alta.exaudiopolicy.engine.AudioPolicyEngine.<init>(Unknown Source)
E/AndroidRuntime( 3207):        at com.alta.exaudiopolicy.engine.AudioPolicyEngine.getInstance(Unknown Source)
E/AndroidRuntime( 3207):        at com.alta.exaudiopolicy.ExAudioPolicyService.onCreate(Unknown Source)
E/AndroidRuntime( 3207):        at android.app.ActivityThread.handleCreateService(ActivityThread.java:2572)
E/AndroidRuntime( 3207):        at android.app.ActivityThread.access$1800(ActivityThread.java:135)
E/AndroidRuntime( 3207):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
E/AndroidRuntime( 3207):        at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 3207):        at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 3207):        at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime( 3207):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3207):        at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 3207):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851)
E/AndroidRuntime( 3207):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)
E/AndroidRuntime( 3207):        at com.alta.android.chiron.Chiron.main(Chiron.java:137)
E/AndroidRuntime( 3207):        at dalvik.system.NativeStart.main(Native Method)
        看异常日志中红色字体部分,居然发现系统启动时/system/app2下面有一个相同的apk存在,不过问题来了,系统启动该apk时,System.loadLibrary加载.so的搜索路径遵循先/system/lib目录,然后/data/app-lib/XXX(包名,下同)目录。我虽然没有将.so push到/system/lib下,但/data/app-lib/XXX目录下安装后应该有的。

        于是再次尝试先安装apk,查看/data/app-lib/XXX目录,.so是存在的;然后重启设备,再次查看/data/app-lib目录,原先的安装包XXX目录居然被删掉了。

【问题原因】:系统启动目录/system/app2下,相同的apk在系统启动加载时,将手动安装的/data/app-lib/xxx目录删除,导致该目录下的.so不存在,从而引发该错误

【解决办法】:删除/system/app2下的apk,只运行手动安装的apk


java.lang.UnsatisfiedLinkError: Could not load SWT library是一个常见的错误,它表示在加载SWT库时出现了问题。这个错误通常有以下几个原因: 1. 缺少SWT库:这个错误可能是由于缺少SWT库文件引起的。SWT是一个用于构建Java图形用户界面的工具包,它需要与操作系统和Java虚拟机兼容的本机库文件。如果缺少这些库文件,就会导致加载失败并出现UnsatisfiedLinkError错误。 2. 错误的SWT库版本:如果使用的SWT库版本与操作系统或Java虚拟机不兼容,也会导致加载失败并出现UnsatisfiedLinkError错误。确保使用与操作系统和Java虚拟机兼容的SWT库版本。 3. 错误的库路径:如果SWT库文件没有正确配置到Java虚拟机的库路径中,也会导致加载失败并出现UnsatisfiedLinkError错误。确保将SWT库文件正确配置到java.library.path系统属性中。 解决这个错误的方法包括: 1. 检查SWT库文件是否存在:确保SWT库文件存在于系统中,并且与操作系统和Java虚拟机兼容。 2. 检查SWT库文件的版本:确保使用与操作系统和Java虚拟机兼容的SWT库版本。 3. 配置库路径:将SWT库文件所在的路径添加到java.library.path系统属性中,以便Java虚拟机能够找到并加载它。 4. 检查依赖项:如果SWT库依赖于其他库文件,确保这些库文件也存在于系统中,并且与操作系统和Java虚拟机兼容。 5. 检查环境变量:如果SWT库依赖于环境变量,确保这些环境变量已正确设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何雷 — 智能汽车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值