diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.java b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.java index 7519f2146faf6d..2081216f3f9d47 100644 --- a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.java +++ b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.java @@ -16,14 +16,20 @@ public class HermesExecutor extends JavaScriptExecutor { private static String mode_; static { - // libhermes must be loaded explicitly to invoke its JNI_OnLoad. - SoLoader.loadLibrary("hermes"); - try { - SoLoader.loadLibrary("hermes-executor-debug"); - mode_ = "Debug"; - } catch (UnsatisfiedLinkError e) { - SoLoader.loadLibrary("hermes-executor-release"); - mode_ = "Release"; + loadLibrary(); + } + + public static void loadLibrary() throws UnsatisfiedLinkError { + if (mode_ == null) { + // libhermes must be loaded explicitly to invoke its JNI_OnLoad. + SoLoader.loadLibrary("hermes"); + try { + SoLoader.loadLibrary("hermes-executor-debug"); + mode_ = "Debug"; + } catch (UnsatisfiedLinkError e) { + SoLoader.loadLibrary("hermes-executor-release"); + mode_ = "Release"; + } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index ddfb5507ec4b47..672d370cd06323 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -14,6 +14,7 @@ import android.app.Application; import android.content.Context; import androidx.annotation.Nullable; +import com.facebook.hermes.reactexecutor.HermesExecutor; import com.facebook.hermes.reactexecutor.HermesExecutorFactory; import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.JSBundleLoader; @@ -28,6 +29,7 @@ import com.facebook.react.devsupport.RedBoxHandler; import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; import com.facebook.react.devsupport.interfaces.DevSupportManager; +import com.facebook.react.jscexecutor.JSCExecutor; import com.facebook.react.jscexecutor.JSCExecutorFactory; import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; import com.facebook.react.packagerconnection.RequestHandler; @@ -347,7 +349,7 @@ private JavaScriptExecutorFactory getDefaultJSExecutorFactory( try { // If JSC is included, use it as normal initializeSoLoaderIfNecessary(applicationContext); - SoLoader.loadLibrary("jscexecutor"); + JSCExecutor.loadLibrary(); return new JSCExecutorFactory(appName, deviceName); } catch (UnsatisfiedLinkError jscE) { // https://github.com/facebook/hermes/issues/78 shows that @@ -365,6 +367,7 @@ private JavaScriptExecutorFactory getDefaultJSExecutorFactory( // Otherwise use Hermes try { + HermesExecutor.loadLibrary(); return new HermesExecutorFactory(); } catch (UnsatisfiedLinkError hermesE) { // If we get here, either this is a JSC build, and of course diff --git a/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.java b/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.java index 09737c178b985a..4adb377de8136c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.java +++ b/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.java @@ -14,8 +14,13 @@ import com.facebook.soloader.SoLoader; @DoNotStrip -/* package */ class JSCExecutor extends JavaScriptExecutor { +/* package */ public class JSCExecutor extends JavaScriptExecutor { + static { + loadLibrary(); + } + + public static void loadLibrary() throws UnsatisfiedLinkError { SoLoader.loadLibrary("jscexecutor"); }