From e9e0e3ebb9ac99b73b261389ba0d944ac981f261 Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Tue, 27 Jun 2023 12:15:34 +0800 Subject: [PATCH] [bare-expo][templates] add gradle.properties to disable runtime scheduler (#23117) # Why we found some regression in sdk 49 for `useEffect` due to the `unstable_useRuntimeSchedulerAlways` change. though it is unclear how is it going in the meantime. let's add the workaround to disable to `unstable_useRuntimeSchedulerAlways`. # How since it is a workaround, i don't want to add the expo-build-properties support. if people come across the useEffect regression and want to test for `unstable_useRuntimeSchedulerAlways=false`. they could have an inline config-plugin ```js # app.config.js const { withGradleProperties } = require("expo/config-plugins"); function disableUnstableRuntimeScheduler(config) { const KEY = "reactNative.unstable_useRuntimeSchedulerAlways"; return withGradleProperties(config, (config) => { config.modResults = config.modResults.filter( (item) => !(item.type === "property" && item.key === KEY) ); config.modResults.push({ type: "property", key: KEY, value: "false", }); return config; }); } export default ({ config }) => { config.plugins = [...(config.plugins ?? []), disableUnstableRuntimeScheduler]; return config; }; ``` # Test Plan ci passed --- apps/bare-expo/android/app/build.gradle | 3 +++ .../app/src/main/java/dev/expo/payments/MainApplication.java | 4 ++++ apps/fabric-tester/android/app/build.gradle | 2 ++ .../main/java/com/community/fabrictester/MainApplication.java | 4 ++++ templates/expo-template-bare-minimum/android/app/build.gradle | 2 ++ .../app/src/main/java/com/helloworld/MainApplication.java | 4 ++++ 6 files changed, 19 insertions(+) diff --git a/apps/bare-expo/android/app/build.gradle b/apps/bare-expo/android/app/build.gradle index fddde9df69b9f4..3a8da4f07ce82a 100644 --- a/apps/bare-expo/android/app/build.gradle +++ b/apps/bare-expo/android/app/build.gradle @@ -107,6 +107,9 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0.0" + + buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) + manifestPlaceholders = [ // [Custom]: Required for expo-app-auth appAuthRedirectScheme: "dev.expo.payments" diff --git a/apps/bare-expo/android/app/src/main/java/dev/expo/payments/MainApplication.java b/apps/bare-expo/android/app/src/main/java/dev/expo/payments/MainApplication.java index 3e8048b61c6a6f..2a0a0e6d068c52 100644 --- a/apps/bare-expo/android/app/src/main/java/dev/expo/payments/MainApplication.java +++ b/apps/bare-expo/android/app/src/main/java/dev/expo/payments/MainApplication.java @@ -7,6 +7,7 @@ import com.facebook.react.ReactApplication; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.soloader.SoLoader; @@ -60,6 +61,9 @@ public ReactNativeHost getReactNativeHost() { public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); + if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { + ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false; + } if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { // If you opted-in for the New Architecture, we load the native entry point for this app. DefaultNewArchitectureEntryPoint.load(); diff --git a/apps/fabric-tester/android/app/build.gradle b/apps/fabric-tester/android/app/build.gradle index c068dd500af0c2..2329c559fe64d5 100644 --- a/apps/fabric-tester/android/app/build.gradle +++ b/apps/fabric-tester/android/app/build.gradle @@ -88,6 +88,8 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0.0" + + buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) } signingConfigs { debug { diff --git a/apps/fabric-tester/android/app/src/main/java/com/community/fabrictester/MainApplication.java b/apps/fabric-tester/android/app/src/main/java/com/community/fabrictester/MainApplication.java index 347674b0d0543b..a5811680f4000f 100644 --- a/apps/fabric-tester/android/app/src/main/java/com/community/fabrictester/MainApplication.java +++ b/apps/fabric-tester/android/app/src/main/java/com/community/fabrictester/MainApplication.java @@ -8,6 +8,7 @@ import com.facebook.react.ReactApplication; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.soloader.SoLoader; @@ -60,6 +61,9 @@ public ReactNativeHost getReactNativeHost() { public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); + if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { + ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false; + } if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { // If you opted-in for the New Architecture, we load the native entry point for this app. DefaultNewArchitectureEntryPoint.load(); diff --git a/templates/expo-template-bare-minimum/android/app/build.gradle b/templates/expo-template-bare-minimum/android/app/build.gradle index cd83140d5d6f1a..7105aaaa3fc81b 100644 --- a/templates/expo-template-bare-minimum/android/app/build.gradle +++ b/templates/expo-template-bare-minimum/android/app/build.gradle @@ -88,6 +88,8 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" + + buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) } signingConfigs { debug { diff --git a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.java b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.java index a4caedafbbe9d0..8502c4402ddcbd 100644 --- a/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.java +++ b/templates/expo-template-bare-minimum/android/app/src/main/java/com/helloworld/MainApplication.java @@ -8,6 +8,7 @@ import com.facebook.react.ReactApplication; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.soloader.SoLoader; @@ -60,6 +61,9 @@ public ReactNativeHost getReactNativeHost() { public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); + if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { + ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false; + } if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { // If you opted-in for the New Architecture, we load the native entry point for this app. DefaultNewArchitectureEntryPoint.load();