realm-kotlin icon indicating copy to clipboard operation
realm-kotlin copied to clipboard

UnsatisfiedLinkError: couldn't find "librealmc.so"

Open KennethRichards opened this issue 2 years ago • 21 comments

SDK: realm-kotlin

Version: 'io.realm.kotlin:library-sync:1.5.0', 'io.realm.kotlin:gradle-plugin:1.5.0'

Observations

  • How frequent do the crash occur? Subset of users

  • Does it happen in production or during dev/test? Production

  • Can the crash be reproduced by you? No. I was unable to reproduce in the Android Emulator on Nexus 7 - Android 8.1

  • Can you provide instructions for how we can reproduce it? Seems to be occuring on app launch when calling App.create()

From Firebase Crashlytics:

Nexus 5X - Android 8.1.0

Fatal Exception: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.crystalyze.crystalyze-mp0dbfOJe8A8n38Sjr4jkw==/base.apk"],nativeLibraryDirectories=[/data/app/com.crystalyze.crystalyze-mp0dbfOJe8A8n38Sjr4jkw==/lib/x86, /system/lib, /vendor/lib]]] couldn't find "librealmc.so"
       at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
       at java.lang.System.loadLibrary(System.java:1657)
       at io.realm.kotlin.internal.interop.realmc.<clinit>(realmc.java:16)
       at io.realm.kotlin.internal.interop.RealmInterop.realm_network_transport_new(RealmInterop.java:49)
       at io.realm.kotlin.mongodb.internal.AppConfigurationImpl.initializeRealmAppConfig(AppConfigurationImpl.java:49)
       at io.realm.kotlin.mongodb.internal.AppConfigurationImpl.<init>(AppConfigurationImpl.java:49)
       at io.realm.kotlin.mongodb.AppConfiguration$Builder.build(AppConfiguration.java:68)
       at io.realm.kotlin.mongodb.App$Companion.create(App.java:68)

Galaxy Tab A - Android 7.1.2

Fatal Exception: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.crystalyze.crystalyze-1/base.apk"],nativeLibraryDirectories=[/data/app/com.crystalyze.crystalyze-1/lib/x86_64, /system/lib64, /vendor/lib64]]] couldn't find "librealmc.so"
       at java.lang.Runtime.loadLibrary0(Runtime.java:1001)
       at java.lang.System.loadLibrary(System.java:1562)
       at io.realm.kotlin.internal.interop.realmc.<clinit>(realmc.java)
       at io.realm.kotlin.internal.interop.RealmInterop.realm_network_transport_new(RealmInterop.java:49)
       at io.realm.kotlin.mongodb.internal.AppConfigurationImpl.initializeRealmAppConfig(AppConfigurationImpl.java:49)
       at io.realm.kotlin.mongodb.internal.AppConfigurationImpl.<init>(AppConfigurationImpl.java:49)
       at io.realm.kotlin.mongodb.AppConfiguration$Builder.build(AppConfiguration.java:68)
       at io.realm.kotlin.mongodb.App$Companion.create(App.java:68)

In the APK, librealmc.so exists in /lib/x86_64 /lib/x86 /lib/arm64-v8a /lib/armeabi-v7a

KennethRichards avatar Jan 06 '23 19:01 KennethRichards

Hi @KennethRichards Since this only happens on some devices it could be that the so-file for some reason is stripped by Google play when installing the app. Do you have more insight in:

  • The suite of devices that this appears on,
  • How many of your users it happens for
  • Any other patterns ... If the devices are root, etc.

rorbech avatar Jan 09 '23 09:01 rorbech

Hi @rorbech This is only happening on the Nexus 5X (Android 8.1.0) and Galaxy Tab A (Android 7.1.2). <1% of users are affected with only 1 of these users being rooted on a Galaxy Tab A. No other patterns for now, but I will continue to monitor

KennethRichards avatar Jan 09 '23 19:01 KennethRichards

Hi @KennethRichards. Thanks for the feedback. Are you by any chance distributing other native libraries than ours in your app? We have seen that if some other library is not available for the exact architecture then it can end up only looking for 32-bit libraries on a 64-bit device, and that library could have been stripped as part of the repackaging in playstore.

rorbech avatar Jan 10 '23 08:01 rorbech

Hi @rorbech, I checked the Github repos from the other dependencies in our app but did not find any indication of native libraries. To be honest I'm not quite sure how else to check/verify this.

When inspecting the APK though, I can see that librealmc.so is the only file located in the following directories: /lib/x86_64 /lib/x86 /lib/arm64-v8a /lib/armeabi-v7a

KennethRichards avatar Jan 11 '23 18:01 KennethRichards

We have seen a similar problem with Realm Java, and the root cause is still unclear. It is pretty rare, but our best guess is that either APK's are being side-loaded in the wrong way or the Play Store doesn't send down the correct files.

Currently, in Realm Kotlin, we are just loading the native lib in a naive way, which should work, but has a few known edge cases, #1215 will introduce a slightly better way, but it isn't a 100% guarantee it will fix this issue.

cmelchior avatar Jan 16 '23 09:01 cmelchior

Hi all, we got a few reports of this issue. Here is some data if it helps.

  • Using version 1.6.1
  • The two devices were rooted.
    • vivo S1 running Android 11
    • OnePlus8Pro running Android 11
Caused by androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found
       at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
       at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
       at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
       at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:2388)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:2358)
       at android.app.ActivityThread.installProvider(ActivityThread.java:7262)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:6803)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6720)
       at android.app.ActivityThread.access$1300(ActivityThread.java:239)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1915)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7680)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Caused by java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found
       at java.lang.Runtime.loadLibrary0(Runtime.java:1093)
       at java.lang.Runtime.loadLibrary0(Runtime.java:1013)
       at java.lang.System.loadLibrary(System.java:1664)
       at io.realm.kotlin.internal.interop.realmc.<clinit>(realmc.java:18)
       at io.realm.kotlin.internal.interop.realmc.realm_config_new(realmc.java:262)
       at io.realm.kotlin.internal.interop.RealmInterop.realm_config_new(RealmInterop.kt:120)
       at io.realm.kotlin.internal.ConfigurationImpl.createNativeConfiguration(ConfigurationImpl.kt:2)
       at io.realm.kotlin.internal.ConfigurationImpl.openRealm$suspendImpl(ConfigurationImpl.kt:4)
       at io.realm.kotlin.internal.ConfigurationImpl.openRealm(ConfigurationImpl.kt)

ersen-lw avatar Feb 27 '23 09:02 ersen-lw

Hi all, got a new stack trace related to the above. This occurred on a rooted device.

Fatal Exception: java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: com.getkeepsafe.relinker.MissingLibraryException: Could not find 'librealmc.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: [].
       at android.app.ActivityThread.installProvider(ActivityThread.java:7862)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:7374)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7081)
       at android.app.ActivityThread.access$1700(ActivityThread.java:277)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2161)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:210)
       at android.os.Looper.loop(Looper.java:299)
       at android.app.ActivityThread.main(ActivityThread.java:8298)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)

ersen-lw avatar Mar 06 '23 08:03 ersen-lw

Hi all, we also had the same issue,

  • realm version: 1.7.0
  • Mobile: SM-Samsung G973F
  • Android version: Android 12 (no rooted)

Exception

MissingLibraryException: Could not find 'librealmc.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: [].
    at com.getkeepsafe.relinker.ApkLibraryInstaller.installLibrary(ApkLibraryInstaller.java:175)
    at com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(ReLinkerInstance.java:180)
    at com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(ReLinkerInstance.java:136)
    at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:70)
    at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:57)
...
(21 additional frame(s) were not displayed)

StartupException: com.getkeepsafe.relinker.MissingLibraryException: Could not find 'librealmc.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: [].
    at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
    at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
    at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
    at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:2516)
...
(13 additional frame(s) were not displayed)

RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: com.getkeepsafe.relinker.MissingLibraryException: Could not find 'librealmc.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: [].
    at android.app.ActivityThread.installProvider(ActivityThread.java:8231)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:7728)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7482)
    at android.app.ActivityThread.access$1600(ActivityThread.java:310)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2281)
...
(7 additional frame(s) were not displayed)

sirambd avatar Mar 28 '23 12:03 sirambd

This error happens every time an APK is extracted from the app installed from PlayStore. Realm 1.9.1, Android 13.

                 	at android.app.ActivityThread.installProvider(ActivityThread.java:7728)
                 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:7216)
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6960)
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2218)
                 	at android.os.Handler.dispatchMessage(Handler.java:106)
                 	at android.os.Looper.loopOnce(Looper.java:242)
                 	at android.os.Looper.loop(Looper.java:359)
                 	at android.app.ActivityThread.main(ActivityThread.java:8133)
                 	at java.lang.reflect.Method.invoke(Native Method)
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
                 Caused by: androidx.startup.StartupException: com.getkeepsafe.relinker.MissingLibraryException: Could not find 'librealmc.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: [].
                 	at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
                 	at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2502)
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2472)
                 	at android.app.ActivityThread.installProvider(ActivityThread.java:7723)
                 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:7216) 
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6960) 
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2218) 
                 	at android.os.Handler.dispatchMessage(Handler.java:106) 
                 	at android.os.Looper.loopOnce(Looper.java:242) 
                 	at android.os.Looper.loop(Looper.java:359) 
                 	at android.app.ActivityThread.main(ActivityThread.java:8133) 
                 	at java.lang.reflect.Method.invoke(Native Method) 
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942) 
                 Caused by: com.getkeepsafe.relinker.MissingLibraryException: Could not find 'librealmc.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: [].
                 	at com.getkeepsafe.relinker.ApkLibraryInstaller.installLibrary(ApkLibraryInstaller.java:175)
                 	at com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(ReLinkerInstance.java:180)
                 	at com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(ReLinkerInstance.java:136)
                 	at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:70)
                 	at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:57)
                 	at io.realm.kotlin.internal.AndroidUtilsKt.loadAndroidNativeLibs(AndroidUtils.kt:14)
                 	at io.realm.kotlin.internal.RealmInitializer.create(RealmInitializer.kt:42)
                 	at io.realm.kotlin.internal.RealmInitializer.create(RealmInitializer.kt:30)
                 	at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238) 
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206) 
                 	at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45) 
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2502) 
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2472) 
                 	at android.app.ActivityThread.installProvider(ActivityThread.java:7723) 
                 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:7216) 
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6960) 
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2218) 
                 	at android.os.Handler.dispatchMessage(Handler.java:106) 
                 	at android.os.Looper.loopOnce(Looper.java:242) 
                 	at android.os.Looper.loop(Looper.java:359) 
                 	at android.app.ActivityThread.main(ActivityThread.java:8133) 
                 	at java.lang.reflect.Method.invoke(Native Method) 
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942) ```

sheinin avatar Jun 14 '23 10:06 sheinin

We have around 350 crashes with the same exception, starting with the realm-kotlin integration.

The device range and system are mixed. Not only rooted devices. 35% are Google devices. 45% are Android 8.

Caused by com.getkeepsafe.relinker.MissingLibraryException: Could not find 'librealmc.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: [].
       at com.getkeepsafe.relinker.ApkLibraryInstaller.installLibrary(ApkLibraryInstaller.java:175)
       at com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(ReLinkerInstance.java:180)
       at com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(ReLinkerInstance.java:136)
       at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:70)
       at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:57)
       at io.realm.kotlin.internal.AndroidUtilsKt.loadAndroidNativeLibs(AndroidUtils.kt:14)

ChrisKruegerDev avatar Jun 25 '23 08:06 ChrisKruegerDev

The problem with this error is that we think this is related to the Playstore distribution and App Bundles and sometimes the app store sends the wrong thing to devices. Unfortunately, this is basically impossible to test and we have never been able to reproduce it.

At the same time, we have seen people manually distributing the wrong app bundles to devices, but this normally happens with custom app distribution frameworks or rooted devices where you try to sideload an APK.

That said, we just pushed a change that is available in 1.10-SNAPSHOT which disables Relinker above API 22. The reason we use Relinker is that Android has known bugs loading native code on API 22 and below, but there is no need to use it above.

So just to be 100% sure this library is not involved in these bugs, it has now been disabled.

Apart from that, the solution we have seen working is to disable App Bundles, unfortunately, the tradeoff there is an increase in APK size.

cmelchior avatar Jun 27 '23 09:06 cmelchior

Are there any updates on this issue or the proposed fix of disabling app bundles? We are also experience this error in one of our production apps.

Devices are for example OnePlus 9 5G with Android 14; Realm Kotlin version currently 1.12.0. Maybe there are fixes in an already released version? The issue is still set to be open therefore I assume it's not fixed yet?

Ynnck123 avatar Mar 21 '24 09:03 Ynnck123

We are also facing this issue. So far we've seen crashes on Galaxy A14 5G Android 13 and Nexus 5x Android 8.

ponvig avatar Mar 25 '24 12:03 ponvig

Same problem on OnePlus 9 Android14, on an Kotlin Multiplatform project. "io.realm.kotlin", name = "library-base" Version = 1.14.0

Caused by androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found
       at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
       at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
 
Caused by java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found
       at java.lang.Runtime.loadLibrary0(Runtime.java:1082)
       at java.lang.Runtime.loadLibrary0(Runtime.java:1003)
       at java.lang.System.loadLibrary(System.java:1661)
       at io.realm.kotlin.internal.AndroidUtilsKt.loadAndroidNativeLibs(AndroidUtils.kt:20)
       at io.realm.kotlin.internal.RealmInitializer.create(RealmInitializer.kt:42)
       at io.realm.kotlin.internal.RealmInitializer.create(RealmInitializer.kt:30)
       at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)

Inside my APK

./lib/armeabi-v7a/librealmc.so
./lib/x86/librealmc.so
./lib/arm64-v8a/librealmc.so
./lib/x86_64/librealmc.so

skauss avatar Mar 25 '24 14:03 skauss

New devices with this error Huawei ALN-AL00, Android 12

Fatal Exception: java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found at android.app.ActivityThread.installProvider(ActivityThread.java:9416) at android.app.ActivityThread.installContentProviders(ActivityThread.java:8919) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8591) at android.app.ActivityThread.access$2800(ActivityThread.java:313) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2902) at android.os.Handler.dispatchMessage(Handler.java:117)

and

Google, Pixel 6 Pro, Android 12

Fatal Exception: java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found at android.app.ActivityThread.installProvider(ActivityThread.java:7464) at android.app.ActivityThread.installContentProviders(ActivityThread.java:6976) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6747) at android.app.ActivityThread.access$1500(ActivityThread.java:256) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2091)

skauss avatar Apr 23 '24 06:04 skauss

I created an Google Issue See loginCompleted.

https://issuetracker.google.com/issues/336832619

skauss avatar Apr 26 '24 07:04 skauss

Same problem on OnePlus 6 Android11, Transsion Note 12 Android13, and Oppo Realme Narzo 30 Android12 on an Android project. "io.realm.kotlin", name = "library-base" Version = 1.13.0

Crash occured for 32 times.

Fatal Exception: java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found
       at android.app.ActivityThread.installProvider(ActivityThread.java:7719)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:7220)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6973)
       at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2219)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:204)
       at android.os.Looper.loop(Looper.java:291)
       at android.app.ActivityThread.main(ActivityThread.java:8129)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:601)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1019)
Caused by androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found
       at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
       at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
       at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
       at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:2473)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:2443)
       at android.app.ActivityThread.installProvider(ActivityThread.java:7714)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:7220)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6973)
       at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2219)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:204)
       at android.os.Looper.loop(Looper.java:291)
       at android.app.ActivityThread.main(ActivityThread.java:8129)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:601)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1019)
Caused by java.lang.UnsatisfiedLinkError: dlopen failed: library "librealmc.so" not found
       at java.lang.Runtime.loadLibrary0(Runtime.java:1082)
       at java.lang.Runtime.loadLibrary0(Runtime.java:1003)
       at java.lang.System.loadLibrary(System.java:1661)
       at io.realm.kotlin.internal.AndroidUtilsKt.loadAndroidNativeLibs(AndroidUtils.kt:20)
       at io.realm.kotlin.internal.RealmInitializer.create(RealmInitializer.kt:42)
       at io.realm.kotlin.internal.RealmInitializer.create(RealmInitializer.kt:30)
       at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
       at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
       at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
       at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:2473)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:2443)
       at android.app.ActivityThread.installProvider(ActivityThread.java:7714)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:7220)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6973)
       at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2219)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:204)
       at android.os.Looper.loop(Looper.java:291)
       at android.app.ActivityThread.main(ActivityThread.java:8129)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:601)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1019)

MSVhora avatar Apr 30 '24 09:04 MSVhora

Same here on Nexus 5X (Android 8.1.0) and Pixel 6 Pro (Android 12):

Fatal Exception: java.lang.RuntimeException
Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mitteloupe.bestchoicemaker-7Fa3BCGrKB0oW6s7-m_jcg==/base.apk"],nativeLibraryDirectories=[/data/app/com.mitteloupe.bestchoicemaker-7Fa3BCGrKB0oW6s7-m_jcg==/lib/x86, /system/lib, /vendor/lib]]] couldn't find "librealmc.so"
Caused by androidx.startup.StartupException
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mitteloupe.bestchoicemaker-7Fa3BCGrKB0oW6s7-m_jcg==/base.apk"],nativeLibraryDirectories=[/data/app/com.mitteloupe.bestchoicemaker-7Fa3BCGrKB0oW6s7-m_jcg==/lib/x86, /system/lib, /vendor/lib]]] couldn't find "librealmc.so"
Caused by java.lang.UnsatisfiedLinkError
dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mitteloupe.bestchoicemaker-7Fa3BCGrKB0oW6s7-m_jcg==/base.apk"],nativeLibraryDirectories=[/data/app/com.mitteloupe.bestchoicemaker-7Fa3BCGrKB0oW6s7-m_jcg==/lib/x86, /system/lib, /vendor/lib]]] couldn't find "librealmc.so"

EranBoudjnah avatar Aug 16 '24 11:08 EranBoudjnah

The problem with this error is that we think this is related to the Playstore distribution and App Bundles and sometimes the app store sends the wrong thing to devices. Unfortunately, this is basically impossible to test and we have never been able to reproduce it.

At the same time, we have seen people manually distributing the wrong app bundles to devices, but this normally happens with custom app distribution frameworks or rooted devices where you try to sideload an APK.

That said, we just pushed a change that is available in 1.10-SNAPSHOT which disables Relinker above API 22. The reason we use Relinker is that Android has known bugs loading native code on API 22 and below, but there is no need to use it above.

So just to be 100% sure this library is not involved in these bugs, it has now been disabled.

Apart from that, the solution we have seen working is to disable App Bundles, unfortunately, the tradeoff there is an increase in APK size.

Based on this reply, if it's really because of the Play Store Distribution: Maybe the cause is based on users downloading the app's from third party stores and not from the official Play Store and therefore this file is missing on their installations?

Has anyone subscribed to this topic been able to reproduce this issue? I assume that everyone here is just posting the stacktraces from the crash monitoring of their choice

Ynnck123 avatar Aug 16 '24 11:08 Ynnck123

The problem with this error is that we think this is related to the Playstore distribution and App Bundles and sometimes the app store sends the wrong thing to devices. Unfortunately, this is basically impossible to test and we have never been able to reproduce it. At the same time, we have seen people manually distributing the wrong app bundles to devices, but this normally happens with custom app distribution frameworks or rooted devices where you try to sideload an APK. That said, we just pushed a change that is available in 1.10-SNAPSHOT which disables Relinker above API 22. The reason we use Relinker is that Android has known bugs loading native code on API 22 and below, but there is no need to use it above. So just to be 100% sure this library is not involved in these bugs, it has now been disabled. Apart from that, the solution we have seen working is to disable App Bundles, unfortunately, the tradeoff there is an increase in APK size.

Based on this reply, if it's really because of the Play Store Distribution: Maybe the cause is based on users downloading the app's from third party stores and not from the official Play Store and therefore this file is missing on their installations?

Has anyone subscribed to this topic been able to reproduce this issue? I assume that everyone here is just posting the stacktraces from the crash monitoring of their choice

I've not been able to reproduce it personally but would like to suggest we rule out the third party stores theory: I get the crashes reported within hours of posting a new release, which I only publish to the Play Store. Unless some third party store picks it up immediately, these are Play Store installations.

Also, the ratio of these crashes for me is about 0.1% of my active users. That's not too bad, but it's still frustrating.

I also noticed that Google closed the ticket that was mentioned earlier.

EranBoudjnah avatar Aug 16 '24 13:08 EranBoudjnah

I have precisely the same crash, and also Nexus 5X Android 8.1.0. Also cannot re-produce on emulator. Realm version: io.realm.kotlin:library-base:1.16.0

RowanG1 avatar Aug 19 '24 23:08 RowanG1