我的应用程序在 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 网站
- 点击常见问题解答
- 搜索“无法加载 librealm-jni.so”
- 您将看到更新信息
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/