From bbc1e121c71d14803d29a931f642bf8ea6ee2023 Mon Sep 17 00:00:00 2001 From: Maddie Lord Date: Wed, 7 May 2025 18:58:21 -0700 Subject: [PATCH] Allow Custom ReactNativeFeatureFlags for Shell 2.0 (#51177) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/51177 Introduce DefaultNewArchitectureEntryPoint.loadWithFeatureFlags() to allow custom feature flags while using DefaultNewArchitectureEntryPoint Reviewed By: arushikesarwani94 Differential Revision: D74228467 fbshipit-source-id: ec3fe7edd31cc9713498b316d6306eaa3686398b --- .../react-native/ReactAndroid/api/ReactAndroid.api | 1 + .../defaults/DefaultNewArchitectureEntryPoint.kt | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 246d8051156..27a2bff7b59 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -1895,6 +1895,7 @@ public final class com/facebook/react/defaults/DefaultNewArchitectureEntryPoint public static final fun load (ZZ)V public static final fun load (ZZZ)V public static synthetic fun load$default (ZZZILjava/lang/Object;)V + public static final fun loadWithFeatureFlags (Lcom/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider;)V public final fun setReleaseLevel (Lcom/facebook/react/common/ReleaseLevel;)V } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt index 5c0c64b914f..81df0a8f98b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt @@ -15,6 +15,7 @@ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsProvider /** * A utility class that serves as an entry point for users setup the New Architecture. @@ -68,6 +69,18 @@ public object DefaultNewArchitectureEntryPoint { DefaultSoLoader.maybeLoadSoLibrary() } + @JvmStatic + public fun loadWithFeatureFlags(featureFlags: ReactNativeFeatureFlagsProvider) { + ReactNativeFeatureFlags.override(featureFlags) + + privateFabricEnabled = featureFlags.enableFabricRenderer() + privateTurboModulesEnabled = featureFlags.useTurboModules() + privateConcurrentReactEnabled = featureFlags.enableFabricRenderer() + privateBridgelessEnabled = featureFlags.enableBridgelessArchitecture() + + DefaultSoLoader.maybeLoadSoLibrary() + } + private var privateFabricEnabled: Boolean = false @JvmStatic