skip to Main Content

I’ve got a react native application, that works fine in Android, in debug and release build types. I want to add a new build type called releaseStaging, so I’m adding this to the app/build.gradle:


android: {
    buildTypes: {
        releaseStaging {
            resValue "string", "CodePushDeploymentKey", '"**something**"'
            matchingFallbacks = ['release']
            signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
        ... debug and release defined here ...
    }
}

I’ve purposely named the build type "releaseStaging" because from reading around I can see that the react.gradle file does certain things based on the build type containing the word "release".

When I do:

npx react-native run-android --variant=releaseStaging

It builds OK and deploys to the device I’m testing on, but it just crashes on start.

On looking at logcat, I can see that the error is:

2022-01-26 12:26:00.494 4038-4102/? E/AndroidRuntime: FATAL EXCEPTION: create_react_context
    Process: com.myapp, PID: 4038
    java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
        SoSource 0: com.facebook.soloader.ApkSoSource[root = /data/data/com.mediaburst.timetastic/lib-main flags = 1]
        SoSource 1: com.facebook.soloader.DirectorySoSource[root = /data/app/com.mediaburst.timetastic-jFpmTXGDULHlB6h75bUGQA==/lib/arm64 flags = 0]
        SoSource 2: com.facebook.soloader.DirectorySoSource[root = /vendor/lib64 flags = 2]
        SoSource 3: com.facebook.soloader.DirectorySoSource[root = /system/lib64 flags = 2]
        Native lib dir: /data/app/com.mediaburst.timetastic-jFpmTXGDULHlB6h75bUGQA==/lib/arm64
     result: 0
        at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:918)
        at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:740)
        at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:654)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:634)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:582)
        at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
        at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:29)
        at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1066)
        at java.lang.Thread.run(Thread.java:919)

2

Answers


  1. This problem occurs if your app has enableHermes flag set to true

    I did not find it documented anywhere, but the solution would be to extend the code like following:

    if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseStagingImplementation files(hermesPath + "hermes-debug.aar") // Add this line
        releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }
    

    I’m not sure if it should be releaseStagingImplementation or releasestagingImplementation, so try with one or the other.

    This tells the Gradle to include Hermes libraries in releaseStaging build type.

    Login or Signup to reply.
  2. need add line in android/app/build.gradle:

    dependencies {
      if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseStagingImplementation files(hermesPath + "hermes-release.aar") // Add this line
        releaseImplementation files(hermesPath + "hermes-release.aar")
      } else {
        implementation jscFlavor
      }
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search