找不到 "librealm-jni.so"

couldn't find "librealm-jni.so"

我的应用程序在 realm 上运行良好。在另一个项目中,我有一个可用的 GCM(推送通知)应用程序。但我需要的是在我的一个应用程序中同时工作,所以将代码合并为一个我开始得到以下异常。

我发现了一些与 this 等相同问题的讨论帖,已将 gradle 更新为 gradle-2.8,但到目前为止运气不佳。

非常感谢任何解决此问题的帮助。

E/AndroidRuntime: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/euxxxx-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "librealm-jni.so"

参见Realm FAQ Couldn't load librealm-jni.so

  1. 转到 Realm 网站
  2. 点击常见问题解答
  3. 搜索“无法加载 librealm-jni.so”
  4. 您将看到更新信息

TDLR;

在 Realm 文档中,您可以找到以下内容:

无法加载“librealm-jni.so” 如果您的应用程序使用其他不支持 64 位架构的本机库,Android 将无法在 ARM64 设备上加载 Realm 的 librealm-jni.so 文件。这是因为 Android 无法同时加载 32 位和 64 位本机库。最好的解决方案是让所有库都提供相同的一组受支持的 ABI,但如果您使用的是第 3 方库,有时这可能不可行。请参阅 VLC 和领域库冲突。

此问题的解决方法是通过将以下代码添加到应用程序的 build.gradle,从 APK 文件中排除 Realm 的 ARM64 库。有关详细信息,请参阅 Android 中的混合 32 位和 64 位依赖项。

android {
    //...
    packagingOptions {
        exclude "lib/arm64-v8a/librealm-jni.so"
    }
    //...
}

此外,Android Gradle 插件 1.4.0 测试版存在一个错误,导致它无法正确打包包含在 jar 文件中的 .so 文件(参见 Realm Java 问题 1421 ).要解决此问题,您可以恢复到 Android Gradle Plugin 1.3.0 或使用 Android Gradle Plugin 1.5.0+.

我们知道许多第 3 方库、框架和管理应用尚不支持 64 位:

并行 Space—但您可以建议您的用户改为安装 64 位版本。 RenderScript——NDK r14 可能会支持 64 位。 Unity3d.

注意:你好,如果我在我的版本 buildTypes 上使用混淆器,这又会出现