SoLoader: android.system.ErrnoException on Android 10 and 11

I’m getting crash reports for an app using SoLoader v0.10.1. The reports are coming from devices running Android 10 and 11. The app is published as an AAB (Android App Bundle), which may or may not be related to the problem. I’m wondering if these exceptions are happening when users try to install the app on an incompatible architecture as described in this comment. So this might not be a bug, but I don’t know for sure. All the reports are from new high-end devices like the Galaxy S21, which might indicate that the users are technically savvy enough to sideload APKs.

java.lang.RuntimeException: 
  at android.app.ActivityThread.handleMakeApplication (ActivityThread.java:7469)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7405)
  at android.app.ActivityThread.access$1500 (ActivityThread.java:301)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2130)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8456)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:596)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Caused by: java.lang.RuntimeException: 
  at com.facebook.soloader.SoLoader.init (SoLoader.java:12)
  at com.mypackage.App.setupMapbox (App.java:12)
  at com.mypackage.App.onCreate (App.java:15)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1192)
  at android.app.ActivityThread.handleMakeApplication (ActivityThread.java:7464)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7405)
  at android.app.ActivityThread.access$1500 (ActivityThread.java:301)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2130)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8456)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:596)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Caused by: java.io.FileNotFoundException: 
  at libcore.io.IoBridge.open (IoBridge.java:492)
  at java.io.FileOutputStream.<init> (FileOutputStream.java:236)
  at java.io.FileOutputStream.<init> (FileOutputStream.java:186)
  at com.facebook.soloader.FileLocker.<init> (FileLocker.java:5)
  at com.facebook.soloader.FileLocker.lock (FileLocker.java:3)
  at com.facebook.soloader.UnpackingSoSource.prepare (UnpackingSoSource.java:3)
  at com.facebook.soloader.SoLoader.initSoSources (SoLoader.java:7)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:4)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:4)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:4)
  at com.mypackage.App.setupMapbox (App.java:4)
  at com.mypackage.App.onCreate (App.java:15)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1192)
  at android.app.ActivityThread.handleMakeApplication (ActivityThread.java:7464)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7405)
  at android.app.ActivityThread.access$1500 (ActivityThread.java:301)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2130)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8456)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:596)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Caused by: android.system.ErrnoException: 
  at libcore.io.Linux.open (Linux.java)
  at libcore.io.ForwardingOs.open (ForwardingOs.java:166)
  at libcore.io.BlockGuardOs.open (BlockGuardOs.java:254)
  at libcore.io.ForwardingOs.open (ForwardingOs.java:166)
  at android.app.ActivityThread$AndroidOs.open (ActivityThread.java:8317)
  at libcore.io.IoBridge.open (IoBridge.java:478)
  at java.io.FileOutputStream.<init> (FileOutputStream.java:236)
  at java.io.FileOutputStream.<init> (FileOutputStream.java:186)
  at com.facebook.soloader.FileLocker.<init> (FileLocker.java:5)
  at com.facebook.soloader.FileLocker.lock (FileLocker.java:3)
  at com.facebook.soloader.UnpackingSoSource.prepare (UnpackingSoSource.java:3)
  at com.facebook.soloader.SoLoader.initSoSources (SoLoader.java:7)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:4)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:4)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:4)
  at com.mypackage.App.setupMapbox (App.java:4)
  at com.mypackage.App.onCreate (App.java:15)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1192)
  at android.app.ActivityThread.handleMakeApplication (ActivityThread.java:7464)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7405)
  at android.app.ActivityThread.access$1500 (ActivityThread.java:301)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2130)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8456)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:596)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 8
  • Comments: 25 (1 by maintainers)

Commits related to this issue

Most upvoted comments

Updating gradle.properties didn’t actually correctly update the version for my project. There may be a RN node_modules dependency that might be overriding it in my case, I’m not totally sure. This is what I did to resolve the version for my project

// gradle.properties
SO_LOADER_VERSION=0.10.3

// app/build.gradle
configurations.all {
    resolutionStrategy {
        eachDependency { details ->
            if (details.requested.group == 'com.facebook.soloader') {
                //https://github.com/facebook/SoLoader/issues/74#issuecomment-961986593
                switch (details.requested.name) {
                    case 'soloader':
                        details.useVersion SO_LOADER_VERSION
                        break
                }
            }
        }
    }
}

Pretty sure you can just update your gradle.properties to include

SO_LOADER_VERSION=0.10.3

This was helpful for me too, seeing the changes: https://github.com/facebook/SoLoader/releases

Thanks for flagging the new release @mym0404 🙏

It is becoming a big issue in our application which is in production. Did anyone manage to find a workaround?

Is it essential to include soloader for react-native apps? is there an alternative?

Pretty sure you can just update your gradle.properties to include

SO_LOADER_VERSION=0.10.3

This was helpful for me too, seeing the changes: https://github.com/facebook/SoLoader/releases

Thanks for flagging the new release @mym0404 🙏

Shouldn’t RN update it’s own dependency to SO loader?

Still in our release pipeline, releasing thurs-fri, will keep posted

I recently upgraded to react-native 0.66 and I started noticing the following launch crash:

java.lang.RuntimeException: 
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7532)
  at android.app.ActivityThread.access$1500 (ActivityThread.java:301)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2150)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8587)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:602)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Caused by: java.lang.RuntimeException: 
  at com.facebook.soloader.SoLoader.init (SoLoader.java:219)
  at com.reactnativenavigation.NavigationApplication.onCreate (NavigationApplication.java:26)
  at com.acuityscheduling.app.android.MainApplication.onCreate (MainApplication.java:116)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1192)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7527)
Caused by: java.io.FileNotFoundException: 
  at libcore.io.IoBridge.open (IoBridge.java:492)
  at java.io.FileOutputStream.<init> (FileOutputStream.java:236)
  at java.io.FileOutputStream.<init> (FileOutputStream.java:186)
  at com.facebook.soloader.FileLocker.<init> (FileLocker.java:36)
  at com.facebook.soloader.FileLocker.lock (FileLocker.java:32)
  at com.facebook.soloader.UnpackingSoSource.prepare (UnpackingSoSource.java:430)
  at com.facebook.soloader.SoLoader.initSoSources (SoLoader.java:327)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:207)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:189)
  at com.facebook.soloader.SoLoader.init (SoLoader.java:217)
Caused by: android.system.ErrnoException: 
  at libcore.io.Linux.open (Native Method)
  at libcore.io.ForwardingOs.open (ForwardingOs.java:166)
  at libcore.io.BlockGuardOs.open (BlockGuardOs.java:254)
  at libcore.io.ForwardingOs.open (ForwardingOs.java:166)
  at android.app.ActivityThread$AndroidOs.open (ActivityThread.java:8448)
  at libcore.io.IoBridge.open (IoBridge.java:478)

It’s the most common crash reason on our production app, and I’ve never experienced it locally. I’m trying to figure out what file the soloader is missing and thus this crash happens.

By following the stacktrace it looks like it all starts here: https://github.com/facebook/SoLoader/blob/v0.9.0/java/com/facebook/soloader/UnpackingSoSource.java#L410-L411 where it’s trying to load the following file: dso_lock (=LOCK_FILE_NAME) from the soDirectory.

Does anyone have any more insight as to what file that dso_lock file is, and why it may not be found?

p.s: For us this only seems to be happening on Android 11 (SDK 30).

Same for me on react-native 0.66

With soloader 0.10.3 issue is fixed! Nice work!

@MuhammadRafeh in your Android app/build.gradle

Hi guys just an update:

The File setWritable solution didn’t work for me. With the new soloader 0.10.2 worked on Android 12 but now I’m facing new errors on my phone.

Interesting @wildseansy! Please let us know here if you get it solved in production!

Thanks for sharing your workaround @brewin . I have some questions though. Are you using react native or is it a native Android app? I’m trying to figure how would this apply to MainApplication.onCreate() since I cannot see that the “load” function would get called anywhere. From what I understand SoLoader.init would already load each library on its own right?