致命异常:java.lang.UnsatisfiedLinkError找不到lib.so

时间:2019-10-02 21:10:12

标签: android android-ndk

最近Crashlytics报告了我正在使用的应用程序从HTC One A9 Android 7.0设备崩溃。

Fatal Exception: java.lang.UnsatisfiedLinkError  nativeLibraryDirectories=[/data/app/com.app.test-1/lib/arm64, /system/lib64, /vendor/lib64]]] couldn't find lib.so

我到处都是特别相似的问题,但是找不到合适的解决方案,因为该应用程序也支持64位版本的本机库。 (请参见下面的cmake配置)

这是第一次使用此设备的人安装了该应用程序,之前我没有在任何其他设备上看到任何链接错误。

我实际上不确定是否要在发布的错误中所提及的路径中寻找native-lib?如果是这样,为什么不根据我的lib/arm64-v8aabiFilters路径中查找lib?

这是我在应用cmake中的gradle配置:

cmake {
    abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}

该问题如何解决?

1 个答案:

答案 0 :(得分:0)

首先,如果是一个坠机事故,我将不必担心。只有当多个用户崩溃时,我才对其进行优先级排序。在Android上会发生严重的错误,特别是如果您考虑某些设备的质量。

我认为这不是您丢失的图书馆。

实际的问题是真正奇怪的库名称: lib.so

这不是您在Android NDK应用程序中期望的有效名称。您总是希望它寻找lib xxx .so

事实并非如此,这意味着库名称被篡改或在清单文件中未正确指定。

在活动标记内查找AndroidManifest.xml,以查找line,如下所示:

<meta-data android:name="android.app.lib_name" android:value="xxx" />

接下来,在您的apk文件中,您将希望看到这样列出的库:

lib/arm64-v8a/libxxx.so
lib/armeabi-v7a/libxxx.so

当然,使用xxx作为您的应用名称。

如果APK或AndroidManifest中的条目丢失,则问题就在您端。如果他们在那里,我只会怀疑是虚假的客户设备,可能是文件存储空间不足之类的东西。