一个UnsatisfiedLinkError错误和它解决办法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个UnsatisfiedLinkError错误和它解决办法相关的知识,希望对你有一定的参考价值。
参考技术A 在vivo X5Pro手机上,点击微博登录时出现崩溃。经过分析发现是微博依赖的so库在该设备上缺失导致的。
vivo X5Pro手机cpu架构为arm64-v8a,在app对应的arm64-v8a目录下没有提供微博分享的so库,按照android so库的加载规则:如果应用存在和设备cpu架构一致的lib库就使用该lib,否则去找其他兼容库。即当app存在arm64-v8a目录,设备为arm64-v8a架构时,默认就会从arm64-v8a目录下拷贝库到app安装目录,一旦该架构目录下so库不完全,就会造成运行时崩溃。
具体见 android官方文档
解决办法是app中尽量使用一个目录库(选择通用的abi库),并保证该目录下so库完整。具体办法:
在build.gradle文件中增加设置(使用armeabi-v7a 和 armeabi,保证应用中这两个库是完备的):
android
defaultConfig
...
ndk
abiFilters "armeabi-v7a","armeabi"
在gradle.properties中增加一条设置
研究过微信、qq的lib目录,发现它们的app内只有一个armeabi目录,这样就避免了这个问题。
但在这个目录中会通过后缀_v7a这种方式区分出armeabi-v7a库,预计会在加载时根据不同的架构动态区分,感觉这是一个即保证效率同时又规避android lib坑的办法。
ADB 中的 java.lang.UnsatisfiedLinkError 和未知错误
【中文标题】ADB 中的 java.lang.UnsatisfiedLinkError 和未知错误【英文标题】:java.lang.UnsatisfiedLinkError and unknown error in ADB 【发布时间】:2016-01-18 18:41:48 【问题描述】:在将我的华为 Ascend P7 从 Android Kitkat (4.4.2) 更新到 Android Lolipop (5.1.1) 后,我在启动应用程序时开始遇到 2 个非常棘手的问题:
1) (Android Studio, Eclipse, ADB 从终端)
[2015-10-20 09:34:48 - myapp] ------------------------------
[2015-10-20 09:34:48 - myapp] Android Launch!
[2015-10-20 09:34:48 - myapp] adb is running normally.
[2015-10-20 09:34:48 - myapp] Performing com.example.myapp.MainActivity activity launch
[2015-10-20 09:34:49 - myapp] Automatic Target Mode: using device '7N2SRA153S024947'
[2015-10-20 09:34:49 - myapp] Uploading myapp.apk onto device '7N2SRA153S024947'
[2015-10-20 09:34:51 - myapp] Installing myapp.apk...
[2015-10-20 09:35:12 - myapp] Success!
[2015-10-20 09:35:13 - myapp] Starting activity com.example.myapp.MainActivity on device 7N2SRA153S024947
[2015-10-20 09:35:13 - myapp] ActivityManager: java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String android.os.SystemProperties.native_get(java.lang.String, java.lang.String) (tried Java_android_os_SystemProperties_native_1get and Java_android_os_SystemProperties_native_1get__Ljava_lang_String_2Ljava_lang_String_2)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.os.SystemProperties.native_get(Native Method)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.os.SystemProperties.get(SystemProperties.java:64)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.os.Environment$UserEnvironment.<init>(Environment.java:144)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.os.Environment.initForCurrentUser(Environment.java:82)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.os.Environment.<clinit>(Environment.java:76)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.os.Environment.getLegacyExternalStorageDirectory(Environment.java:421)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.os.Debug.<clinit>(Debug.java:96)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.ddm.DdmHandleHello.handleHELO(DdmHandleHello.java:164)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.ddm.DdmHandleHello.handleChunk(DdmHandleHello.java:91)
[2015-10-20 09:35:13 - myapp] ActivityManager: at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
[2015-10-20 09:35:13 - myapp] ActivityManager: java.lang.UnsatisfiedLinkError: android.os.Debug
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.ddm.DdmHandleHello.handleFEAT(DdmHandleHello.java:176)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.ddm.DdmHandleHello.handleChunk(DdmHandleHello.java:93)
[2015-10-20 09:35:13 - myapp] ActivityManager: at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
[2015-10-20 09:35:13 - myapp] ActivityManager: java.lang.UnsatisfiedLinkError: android.os.Debug
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.ddm.DdmHandleProfiling.handleMPRQ(DdmHandleProfiling.java:187)
[2015-10-20 09:35:13 - myapp] ActivityManager: at android.ddm.DdmHandleProfiling.handleChunk(DdmHandleProfiling.java:88)
[2015-10-20 09:35:13 - myapp] ActivityManager: at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
2)(仅限 Eclipse)
[2015-10-20 09:38:15 - myapp] Android Launch!
[2015-10-20 09:38:15 - myapp] adb is running normally.
[2015-10-20 09:38:15 - myapp] Performing com.example.myapp.MainActivity activity launch
[2015-10-20 09:38:15 - myapp] Automatic Target Mode: using device '7N2SRA153S024947'
[2015-10-20 09:38:16 - myapp] Uploading myapp.apk onto device '7N2SRA153S024947'
[2015-10-20 09:38:18 - myapp] Installing myapp.apk...
[2015-10-20 09:38:19 - myapp] Installation error: Unknown failure
[2015-10-20 09:38:19 - myapp] Please check logcat output for more details.
[2015-10-20 09:38:19 - myapp] Launch canceled!
我在 logcat 中找不到任何东西。
我找不到任何可靠的解决方案,只有解决方法:重启 eclipse/android studio,杀死启动 adb 服务器,重新连接设备。如果它能够工作,它只能在短时间内工作。 使用不同 USB 电缆的 2 台不同机器上仍然存在问题。这绝对是棒棒糖中的一些错误(一切都适用于 kitkat),因为我也发现了一些关于在华硕或 htc 设备上的棒棒糖上发生的问题。但是,我找不到任何适用于华为的通用解决方法。
我使用 Mac OS X,因此 Windows 解决方案不适合我。
我打开了程序员模式,打开了 USB 调试,禁用了从 adb 安装的确认。但是“通过usb验证应用程序”选项变灰了,有人说禁用它可以使它工作。亚行 1.0.32。
【问题讨论】:
您尝试时设备的屏幕是否已解锁? 是的,它已解锁并在主屏幕上。 你好通过这个链接code.google.com/p/android/issues/detail?id=66661 它与AVD无关,我在设备上运行..并且错误不同。 【参考方案1】:这是您的智能手机制造商的错误,华为的更新(如果可用)应该是您问题的最终解决方案。
同时,我发现 this 其他讨论提出了不同的解决方法,如果您还没有尝试,可能会进一步尝试。
使用终端,只需使用 adb 重新安装即可避免 Android Studio 重新编译时间:
$终端:/sdk/platform-tools/adb install -r
通常它会起作用。如果再次失败,只需再次运行此命令
如果你真的想尝试,过程是:
关闭 Studio(或尝试禁用工具 | Android | 启用 ADB 集成) 在 shell 上执行以下操作:
$ adb push /path/to/your/project/app/build/outputs/apk/app-debug.apk /data
$ adb shell pm install /data/app-debug.apk
$ (am start command from comment #4/#5) 重新启动 IDE(或重新启用 ADB 集成)。
【讨论】:
是的,我什至在说那个讨论。但是我如何在开发过程中使用它呢?我想测试代码的变化,所以我必须生成apk,关闭android studio,从控制台推送并安装它,然后测试并打开studio?正如我所说的重新连接设备并重新启动工作室(并非总是第一次),但我不能那样工作。至于更新,我希望我们能从华为那里得到更新,但已经有很多关于棒棒糖的小更新,而且它仍然存在。即使这款手机是 2014 年的旗舰产品,也没有 6.0 的计划...... 你不能在虚拟设备上测试它吗? x86 虚拟设备速度非常快! 不幸的是,我在使用 android 模拟器时遇到了很多问题。它运行得非常快,但几分钟后我的 mac 完全挂起,我必须重新启动它。我有一部很棒的手机,我更喜欢使用它,但华为用棒棒糖摧毁了它。好吧,我可以回到 4.4.2,但我想在我可以使用的最高 android 版本上测试我的应用程序。 我明白了。无论如何,我建议您也为您的模拟器找到一个解决方案(也许减少它的 RAM 或尝试不同的配置)。通常您不想只在单个设备/android 操作系统版本上测试您的应用程序。您应该检查在旧手机和不同屏幕尺寸的设备上是否正常工作。 我知道,但我制作的游戏可以很好地适应不同的屏幕尺寸。为此,它在所有 iOS 设备上进行了很多测试。我也有很慢的旧平板电脑,我可以在那里测试性能,但我更喜欢我的手机:)【参考方案2】:华为最新发布的固件(B839)修复了该问题。
【讨论】:
更新到 B856 在我的情况下解决了这个问题。这绝对是一个错误。以上是关于一个UnsatisfiedLinkError错误和它解决办法的主要内容,如果未能解决你的问题,请参考以下文章
使用第三方库出现找不到so库UnsatisfiedLinkError错误的原因以及解决方案
java.lang.UnsatisfiedLinkError: Ubuntu 上的 TestJni.print(LA;)V 错误
Android NDK常见SO加载错误UnsatisfiedLinkError解决方案
添加jdplay aar时出现 UnsatisfiedLinkError错误