From b68dad57d04c3cbdec52eb71419d56b1560de28e Mon Sep 17 00:00:00 2001 From: Minsik Kim Date: Sun, 26 Oct 2025 16:56:59 +0900 Subject: [PATCH 1/2] update test template for react native v0.81 --- .../java/com/testcodepush/MainApplication.kt | 36 ++++++++----------- test/test.ts | 6 ++-- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/test/template/android/app/src/main/java/com/testcodepush/MainApplication.kt b/test/template/android/app/src/main/java/com/testcodepush/MainApplication.kt index 053e256ff..d5d7c46a9 100644 --- a/test/template/android/app/src/main/java/com/testcodepush/MainApplication.kt +++ b/test/template/android/app/src/main/java/com/testcodepush/MainApplication.kt @@ -4,46 +4,38 @@ import android.app.Application import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage -import com.facebook.react.common.annotations.UnstableReactNativeAPI -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.soloader.OpenSourceMergedSoMapping -import com.facebook.soloader.SoLoader + import com.microsoft.codepush.react.CodePush -@OptIn(UnstableReactNativeAPI::class) class MainApplication : Application(), ReactApplication { - override val reactNativeHost: ReactNativeHost = + override val reactNativeHost: ReactNativeHost = object : DefaultReactNativeHost(this) { - override fun getPackages(): List { - val packages = PackageList(this).packages - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return packages - } - + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + } + override fun getJSMainModuleName(): String = "index" override fun getJSBundleFile(): String = CodePush.getJSBundleFile() - + override fun getUseDeveloperSupport(): Boolean = 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(this, reactNativeHost) + override val reactHost: ReactHost + get() = getDefaultReactHost(applicationContext, reactNativeHost) override fun onCreate() { super.onCreate() - SoLoader.init(this, OpenSourceMergedSoMapping) - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() - } + loadReactNative(this) } - -} +} \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index ca4f70d4c..a3fb86958 100644 --- a/test/test.ts +++ b/test/test.ts @@ -86,7 +86,7 @@ class RNAndroid extends Platform.Android implements RNPlatform { // we use hard-coded deployment key and server url in app.json return Q.Promise((resolve, reject) => { TestUtil.replaceString(androidMainActivityPath, "\"main\"", `"${TestConfig.TestAppName}"`); - TestUtil.replaceString(AndroidManifest, "android:allowBackup=\"true\"", "android:allowBackup=\"true\"" + "\n\t" + "android:usesCleartextTraffic=\"true\""); + TestUtil.replaceString(AndroidManifest, "\\${usesCleartextTraffic}", "true"); resolve(null); }); } @@ -117,7 +117,7 @@ class RNAndroid extends Platform.Android implements RNPlatform { const string = path.join(innerprojectDirectory, "android", "app", "src", "main", "res", "values", "strings.xml"); TestUtil.replaceString(string, TestUtil.SERVER_URL_PLACEHOLDER, this.getServerUrl()); TestUtil.replaceString(string, TestUtil.ANDROID_KEY_PLACEHOLDER, this.getDefaultDeploymentKey()); - TestUtil.replaceString(AndroidManifest, "android:allowBackup=\"false\"", "android:allowBackup=\"false\"" + "\n\t" + "android:usesCleartextTraffic=\"true\""); + TestUtil.replaceString(AndroidManifest, "\\${usesCleartextTraffic}", "true"); return Q(null); @@ -342,7 +342,7 @@ class RNProjectManager extends ProjectManager { .then(TestUtil.getProcessOutput.bind(undefined, `npx expo prebuild --clean`, { cwd: path.join(projectDirectory, TestConfig.TestAppName) })) .then(() => { return null; }); } else { - return TestUtil.getProcessOutput("npx @react-native-community/cli init " + appName + " --version 0.80.1 --install-pods", { cwd: projectDirectory, timeout: 30 * 60 * 1000 }) + return TestUtil.getProcessOutput("npx @react-native-community/cli init " + appName + " --version 0.81.5 --install-pods", { cwd: projectDirectory, timeout: 30 * 60 * 1000 }) .then((e) => { console.log(`"npx @react-native-community/cli init ${appName}" success. cwd=${projectDirectory}`); return e; }) .then(this.copyTemplate.bind(this, templatePath, projectDirectory)) .then(TestUtil.getProcessOutput.bind(undefined, TestConfig.thisPluginInstallString, { cwd: path.join(projectDirectory, TestConfig.TestAppName) })) From 99ea2b7dedc5363f9f89100da56a57781fcb2d2d Mon Sep 17 00:00:00 2001 From: elio Date: Sun, 26 Oct 2025 20:48:16 +0900 Subject: [PATCH 2/2] fix android reload failure --- .../java/com/microsoft/codepush/react/CodePushNativeModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java b/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java index baca1a0e4..4047a5c33 100644 --- a/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java +++ b/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java @@ -858,7 +858,7 @@ public void removeListeners(Integer count) { public ReactHostDelegate getReactHostDelegate(ReactHostImpl reactHostImpl) { try { Class clazz = reactHostImpl.getClass(); - Field field = clazz.getDeclaredField("mReactHostDelegate"); + Field field = clazz.getDeclaredField("reactHostDelegate"); field.setAccessible(true); // Get the value of the field for the provided instance