From 2c0f1d08a9e7c5327691eee097e138470890487d Mon Sep 17 00:00:00 2001 From: Juozas Petkelis Date: Wed, 6 May 2026 12:56:17 +0300 Subject: [PATCH 1/2] docs: update ReactNativeHostManager for Expo 55 --- website/src/docs/brownfield/android.mdx | 65 +++++++++---------------- 1 file changed, 23 insertions(+), 42 deletions(-) diff --git a/website/src/docs/brownfield/android.mdx b/website/src/docs/brownfield/android.mdx index a1076e7e7..da5ecc071 100644 --- a/website/src/docs/brownfield/android.mdx +++ b/website/src/docs/brownfield/android.mdx @@ -282,50 +282,31 @@ If you're integrating an Expo app with Expo CLI instead of Rock, skip this step. 1. Make `ReactNativeHostManager` aware with expo modules: ```diff -@@ -11,6 +11,8 @@ import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost - import com.facebook.react.defaults.DefaultReactNativeHost - import com.facebook.react.soloader.OpenSourceMergedSoMapping - import com.facebook.soloader.SoLoader +@@ -4,9 +4,18 @@ + import com.callstack.reactnativebrownfield.OnJSBundleLoaded + import com.callstack.reactnativebrownfield.ReactNativeBrownfield + import com.facebook.react.PackageList ++import com.facebook.react.ReactHost + import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative +import expo.modules.ApplicationLifecycleDispatcher -+import expo.modules.ReactNativeHostWrapper - - class ReactNativeHostManager { - companion object { -@@ -37,21 +39,23 @@ class ReactNativeHostManager { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() - } ++import expo.modules.ExpoReactHostFactory + + object ReactNativeHostManager { + fun initialize(application: Application, onJSBundleLoaded: OnJSBundleLoaded? = null) { + ApplicationLifecycleDispatcher.onApplicationCreate(application) - - - /** - * If your project is using ExpoModules, you can use `index` instead. - * - * Below module name is used when your project is using Expo CLI - */ -+ val jsMainModuleName = ".expo/.virtual-metro-entry" - - val reactApp = object : ReactApplication { -- override val reactNativeHost: ReactNativeHost = object : DefaultReactNativeHost(application) { -+ override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(application, -+ object : DefaultReactNativeHost(application) { - override fun getPackages(): MutableList { - return PackageList(application).packages - } - -- override fun getJSMainModuleName(): String = "index" -+ override fun getJSMainModuleName(): String = jsMainModuleName - override fun getBundleAssetName(): String = "index.android.bundle" - - override fun getUseDeveloperSupport() = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED -- } -+ }) - - override val reactHost: ReactHost - get() = getDefaultReactHost(application, reactNativeHost) ++ + loadReactNative(application) + +- val packageList = PackageList(application).packages +- ReactNativeBrownfield.initialize(application, packageList, onJSBundleLoaded) ++ val reactHost: ReactHost = ExpoReactHostFactory.getDefaultReactHost( ++ context = application.applicationContext, ++ packageList = PackageList(application).packages ++ ) ++ ++ ReactNativeBrownfield.initialize(application, reactHost, onJSBundleLoaded) + } + } ``` 2. Update your `reactnativeapp/build.gradle`: From cd3102129200763c0ebda6a181df84efb04d224f Mon Sep 17 00:00:00 2001 From: Juozas Petkelis Date: Tue, 12 May 2026 13:16:29 +0300 Subject: [PATCH 2/2] docs: addjust ReactNativeHostManager according to Expo 55 template --- website/src/docs/brownfield/android.mdx | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/website/src/docs/brownfield/android.mdx b/website/src/docs/brownfield/android.mdx index da5ecc071..4e2cd051c 100644 --- a/website/src/docs/brownfield/android.mdx +++ b/website/src/docs/brownfield/android.mdx @@ -282,7 +282,9 @@ If you're integrating an Expo app with Expo CLI instead of Rock, skip this step. 1. Make `ReactNativeHostManager` aware with expo modules: ```diff -@@ -4,9 +4,18 @@ +@@ -3,13 +3,30 @@ ++import android.app.Application ++import android.content.res.Configuration import com.callstack.reactnativebrownfield.OnJSBundleLoaded import com.callstack.reactnativebrownfield.ReactNativeBrownfield import com.facebook.react.PackageList @@ -293,19 +295,25 @@ If you're integrating an Expo app with Expo CLI instead of Rock, skip this step. object ReactNativeHostManager { fun initialize(application: Application, onJSBundleLoaded: OnJSBundleLoaded? = null) { -+ ApplicationLifecycleDispatcher.onApplicationCreate(application) -+ loadReactNative(application) - val packageList = PackageList(application).packages - ReactNativeBrownfield.initialize(application, packageList, onJSBundleLoaded) -+ val reactHost: ReactHost = ExpoReactHostFactory.getDefaultReactHost( -+ context = application.applicationContext, -+ packageList = PackageList(application).packages -+ ) ++ ApplicationLifecycleDispatcher.onApplicationCreate(application) ++ ++ val reactHost: ReactHost by lazy { ++ ExpoReactHostFactory.getDefaultReactHost( ++ context = application.applicationContext, ++ packageList = PackageList(application).packages, ++ ) ++ } + + ReactNativeBrownfield.initialize(application, reactHost, onJSBundleLoaded) } ++ ++ fun onConfigurationChanged(application: Application, newConfig: Configuration) { ++ ApplicationLifecycleDispatcher.onConfigurationChanged(application, newConfig) ++ } } ```