java - 找不到 "librealm-jni.so"

标签 java android gradle realm

我的应用程序在 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"

最佳答案

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

TDLR;

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

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

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

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

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

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

平行空间 - 但您可以建议您的用户安装 64 位版本。 RenderScript — NDK r14 可能会支持 64 位。 Unity3d。

注意:您好,如果我在发布的 buildTypes 上使用 proguard,则会再次出现此情况

关于java - 找不到 "librealm-jni.so",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33734369/

相关文章:

java - 什么是 "driver class"?

Java Proguard 和 int 比较器

android - 处理大型位图

android - script.sh:第1行:./gradlew:Jenkins上没有这样的文件或目录

android - Artifactory 使用资源发布 Android 库

java - 跨对象实例同步

Java剪贴板问题

android - Smack XMPP 连接状态,数据不正确

java - 监听器垃圾收集说明(Java/Android)

Android Studio 将语法标记为错误,但 gradle 编译