本机库加载时出现无法解释的UnsatisfiedLinkError

时间:2014-02-23 15:11:15

标签: android android-ndk

首先,我的应用程序通常可以正常运行。我在所有四个32位CPU / ABI上拥有众多客户端,他们在运行应用程序时没有遇到任何问题。本机库是为所有四种体系结构而构建的。图书馆在那里,方法全部到位并命名正确。然而,我偶尔会收到异常报告,因为无法加载本机库:

java.lang.UnsatisfiedLinkError: Couldn't load foo from loader
dalvik.system.PathClassLoader [DexPathList[[zip file "/data/app/com.myapp-1.apk"],
nativeLibraryDirectories=[/data/app-lib/com.myapp-1, /vendor/lib, /system/lib]]]:
findLibrary returned null

我无法在模拟器上或在我可以访问的多个设备中重现这一点。我从以下设备获得了此例外的报告:

Sony Xperia LT29i (Android 4.3)
Sony Xperia C5303 (Android 4.3)
LG Optimus E405 (Android 2.3.6)

这是非常具体的。到目前为止,我有27个报告,但只有这三个设备。所有这些都是armeabi-v7a设备,不确定它是否重要。

请问任何想法?

编辑:从Optimus获得一些 logcat:

I/ActivityManager(23495): process name to start: com.myapp
I/ActivityManager(23495): Start proc com.myapp for activity com.myapp/.Main: pid=5755 uid=10078 gids={3003, 1015, 1007}

就是这样。下面没有任何内容表明错误。

3 个答案:

答案 0 :(得分:2)

4.3中修复了影响应用更新的普遍问题,但似乎问题并没有完全消失。 Recent updates错误地调用了Xperia设备。最终用户卸载+重新安装应该可以解决问题。

答案 1 :(得分:2)

卸载并重新安装工作,但不幸的是,您可能会失去用户。为了解决这个问题,在我的项目中使用了铬的解决方案,它并不完美,但看起来很有效:

try {
        System.loadLibrary("YourLib");
    } catch (UnsatisfiedLinkError e) {

        System.load("YourLibPath");
    }

答案 2 :(得分:-1)

我把System.loadLibrary(" libMyLibrary")放回了null。我将其更改为System.loadLibrary(" MyLibrary")并且它有效。