com.getkeepsafe.relinker.MissingLibraryException:librealm-jni.so

Cri*_*fer 9 java android realm kotlin

我向商店发送了一个新版本,当我打开它时,它崩溃了。在调试模式下没有发生,但在发布构建类型中我可以重现它。

例外的是:

Fatal Exception: java.lang.RuntimeException: Unable to create application asd.esa.persistent.ESApp: com.getkeepsafe.relinker.MissingLibraryException: librealm-jni.so
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6123)
       at android.app.ActivityThread.access$1200(ActivityThread.java:213)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1807)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:193)
       at android.app.ActivityThread.main(ActivityThread.java:6923)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:870)
Run Code Online (Sandbox Code Playgroud)

Cri*_*fer 5

注意:如果我在发布的 buildTypes 上使用 proguard,它会再次出现

\n

我只是发布为什么 Realm 说:

\n

无法\xe2\x80\x99t 加载librealm-jni.so\n如果您的应用程序使用不\xe2\x80\x99t 附带的支持 64 位体系结构的其他本机库,Android 将无法加载 Realm\xe2\x80\x99s librealm-jni.so ARM64 设备上的文件。这是因为 Android 无法同时加载 32 位和 64 位本机库。最好的解决方案是让所有库提供相同的受支持 ABI 集,但有时如果您使用的是第三方库,这可能不可行。请参阅 VLC 和领域库冲突。

\n

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

\n
android {\n    //...\n    packagingOptions {\n        exclude "lib/arm64-v8a/librealm-jni.so"\n    }\n    //...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n

平行空间 \xe2\x80\x93,但您可以建议用户安装 64 位版本。\nRenderScript\xe2\x80\x94NDK r14 可能会支持 64 位。\nUnity3d。

\n