From 852b5e4d2cb201f1036c703538ab10e03e9d32c1 Mon Sep 17 00:00:00 2001 From: r0h0gg6 Date: Wed, 1 Apr 2026 20:23:18 -0700 Subject: [PATCH] Upgrade ERN to support RN 0.81 --- azure/templates/system-tests.yml | 2 +- azure/templates/unit-tests.yml | 2 +- ern-composite-gen/src/addRNDepToPjson.ts | 16 +- ern-composite-gen/src/createMetroConfig.ts | 139 +++++++++- ern-composite-gen/src/generateComposite.ts | 1 + .../src/AndroidGenerator.ts | 7 +- .../src/hull/build.gradle | 2 - .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../src/hull/lib/build.gradle | 2 - .../src/reactNativeBundleAndroid.ts | 1 + ern-container-gen/src/reactNativeBundleIos.ts | 1 + ern-core/src/ReactNativeCli.ts | 84 ++++-- ern-core/src/android.ts | 86 ++++-- .../injectReactNativeVersionKeysInObject.ts | 1 + ern-core/src/iosUtil.ts | 4 +- ern-core/test/android-test.ts | 137 +++++----- .../src/AndroidRunnerGenerator.ts | 1 + .../src/hull/app/build.gradle | 22 ++ .../test/AndroidRunnerGenerator-test.ts | 41 +++ .../app/build.gradle | 15 +- .../app/build.gradle | 121 +++++++++ .../app/proguard-rules.pro | 21 ++ .../app/src/debug/AndroidManifest.xml | 6 + .../app/src/main/AndroidManifest.xml | 24 ++ .../walmartlabs/ern/dummy/MainActivity.java | 27 ++ .../ern/dummy/MainApplication.java | 19 ++ .../walmartlabs/ern/dummy/RunnerConfig.java | 17 ++ .../app/src/main/res/layout/activity_main.xml | 11 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4690 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 6795 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2498 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3605 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6154 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 9045 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12570 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 17977 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17293 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 24142 bytes .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/strings.xml | 5 + .../app/src/main/res/values/styles.xml | 11 + .../simple-android-runner-rn-81/build.gradle | 26 ++ .../gradle.properties | 41 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 61574 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + .../simple-android-runner-rn-81/gradlew | 252 ++++++++++++++++++ .../simple-android-runner-rn-81/gradlew.bat | 94 +++++++ .../settings.gradle | 5 + .../fixtures/android-container/build.gradle | 2 +- .../android-container/gradle.properties | 19 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 61574 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../fixtures/android-container/gradlew | 18 +- .../fixtures/android-container/gradlew.bat | 15 +- .../android-container/lib/build.gradle | 19 +- .../lib/src/main/AndroidManifest.xml | 3 +- .../ElectrodeReactActivityDelegate.java | 2 +- .../ern/container/plugins/BridgePlugin.java | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/lib/build.gradle | 15 +- .../android/lib/src/main/AndroidManifest.xml | 2 +- .../ern-movie-api-impl/ios/Podfile | 56 ++-- 62 files changed, 1242 insertions(+), 175 deletions(-) create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/build.gradle create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/proguard-rules.pro create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/debug/AndroidManifest.xml create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/AndroidManifest.xml create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainActivity.java create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainApplication.java create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/RunnerConfig.java create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/layout/activity_main.xml create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/colors.xml create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/strings.xml create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/styles.xml create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/build.gradle create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle.properties create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle/wrapper/gradle-wrapper.jar create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle/wrapper/gradle-wrapper.properties create mode 100755 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew.bat create mode 100644 ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/settings.gradle diff --git a/azure/templates/system-tests.yml b/azure/templates/system-tests.yml index edd9aaf89..184868ed9 100644 --- a/azure/templates/system-tests.yml +++ b/azure/templates/system-tests.yml @@ -1,7 +1,7 @@ steps: - task: NodeTool@0 inputs: - versionSpec: '18.x' + versionSpec: '20.x' displayName: 'Install Node.js' - script: | git config --global user.email "electrodenative@gmail.com" diff --git a/azure/templates/unit-tests.yml b/azure/templates/unit-tests.yml index 166e886cd..13b347a50 100644 --- a/azure/templates/unit-tests.yml +++ b/azure/templates/unit-tests.yml @@ -1,7 +1,7 @@ steps: - task: NodeTool@0 inputs: - versionSpec: '18.x' + versionSpec: '20.x' displayName: 'Install Node.js' - script: | yarn --frozen-lockfile diff --git a/ern-composite-gen/src/addRNDepToPjson.ts b/ern-composite-gen/src/addRNDepToPjson.ts index d3fa544a0..313cc07be 100644 --- a/ern-composite-gen/src/addRNDepToPjson.ts +++ b/ern-composite-gen/src/addRNDepToPjson.ts @@ -7,7 +7,21 @@ export async function addRNDepToPjson(dir: string, version: string) { // For React Native 0.77+, also add required dependencies // This is required by the new Metro config format and CLI - if (semver.gte(version, '0.77.0')) { + if (semver.gte(version, '0.81.0')) { + compositePackageJson.dependencies['@react-native/metro-config'] = version; + compositePackageJson.dependencies['@react-native/babel-preset'] = version; + // RN 0.81+ uses @react-native/community-cli-plugin (internal to RN monorepo) + compositePackageJson.dependencies['@react-native/community-cli-plugin'] = + version; + // Add CLI packages to ensure android and ios platforms are available + compositePackageJson.dependencies['@react-native-community/cli'] = '15.1.3'; + compositePackageJson.dependencies[ + '@react-native-community/cli-platform-android' + ] = '15.1.3'; + compositePackageJson.dependencies[ + '@react-native-community/cli-platform-ios' + ] = '15.1.3'; + } else if (semver.gte(version, '0.77.0')) { compositePackageJson.dependencies['@react-native/metro-config'] = version; compositePackageJson.dependencies['@react-native/babel-preset'] = version; // Add CLI packages to ensure android and ios platforms are available diff --git a/ern-composite-gen/src/createMetroConfig.ts b/ern-composite-gen/src/createMetroConfig.ts index 2bdf5f13b..e2da774e3 100644 --- a/ern-composite-gen/src/createMetroConfig.ts +++ b/ern-composite-gen/src/createMetroConfig.ts @@ -2,6 +2,8 @@ import fs from 'fs-extra'; import path from 'path'; import beautify from 'js-beautify'; import os from 'os'; +import semver from 'semver'; +import { getMetroBlacklistPath } from 'ern-core'; export async function createMetroConfig({ cwd, @@ -9,15 +11,52 @@ export async function createMetroConfig({ blacklistRe, extraNodeModules, watchFolders, + reactNativeVersion, }: { cwd?: string; projectRoot?: string; blacklistRe?: RegExp[]; extraNodeModules?: { [pkg: string]: string }; watchFolders?: string[]; + reactNativeVersion?: string; }) { - // Metro config format for React Native 0.73+ - const metroConfigContent = `const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); + const useModernConfig = + reactNativeVersion && semver.gte(reactNativeVersion, '0.73.0'); + + const metroConfigContent = useModernConfig + ? createModernMetroConfig({ + projectRoot, + blacklistRe, + extraNodeModules, + watchFolders, + }) + : createLegacyMetroConfig({ + projectRoot, + blacklistRe, + extraNodeModules, + watchFolders, + reactNativeVersion: reactNativeVersion || '0.60.0', + }); + + return fs.writeFile( + path.join(cwd ?? path.resolve(), 'metro.config.js'), + beautify.js(metroConfigContent), + ); +} + +// Metro config format for React Native 0.73+ +function createModernMetroConfig({ + projectRoot, + blacklistRe, + extraNodeModules, + watchFolders, +}: { + projectRoot?: string; + blacklistRe?: RegExp[]; + extraNodeModules?: { [pkg: string]: string }; + watchFolders?: string[]; +}): string { + return `const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); const defaultConfig = getDefaultConfig(__dirname); const config = { @@ -45,7 +84,7 @@ const config = { ], sourceExts: [ ...defaultConfig.resolver.sourceExts, - "svg", + "svg", "mjs" ], blockList: [ @@ -72,9 +111,95 @@ const config = { }; module.exports = mergeConfig(defaultConfig, config);`; +} - return fs.writeFile( - path.join(cwd ?? path.resolve(), 'metro.config.js'), - beautify.js(metroConfigContent), - ); +// Legacy Metro config format for React Native < 0.73 +function createLegacyMetroConfig({ + projectRoot, + blacklistRe, + extraNodeModules, + watchFolders, + reactNativeVersion, +}: { + projectRoot?: string; + blacklistRe?: RegExp[]; + extraNodeModules?: { [pkg: string]: string }; + watchFolders?: string[]; + reactNativeVersion: string; +}): string { + return `const blacklist = require('${getMetroBlacklistPath( + reactNativeVersion, + )}'); +module.exports = { + ${projectRoot ? `projectRoot: "${projectRoot}",` : ''} + ${ + watchFolders + ? `watchFolders: [ + ${watchFolders + .map((x) => `"${x.replace(/\\/g, '\\\\')}"`) + .join(`,${os.EOL}`)} + ],` + : '' + } + resolver: { + blacklistRE: blacklist([ + // Ignore IntelliJ directories + /.*\\.idea\\/.*/, + // ignore git directories + /.*\\.git\\/.*/, + // Ignore android directories + /.*\\/app\\/build\\/.*/, + ${blacklistRe ? blacklistRe.join(`,${os.EOL}`) : ''} + ]), + ${ + extraNodeModules + ? `extraNodeModules: ${JSON.stringify(extraNodeModules, null, 2)},` + : '' + } + assetExts: [ + // Image formats + "bmp", + "gif", + "jpg", + "jpeg", + "png", + "psd", + "webp", + // Video formats + "m4v", + "mov", + "mp4", + "mpeg", + "mpg", + "webm", + // Audio formats + "aac", + "aiff", + "caf", + "m4a", + "mp3", + "wav", + // Document formats + "html", + "pdf", + // Font formats + "otf", + "ttf", + // Archives (virtual files) + "zip" + ], + sourceExts: ["js", "json", "ts", "tsx", "svg", "mjs"], + }, + transformer: { + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + assetPlugins: ['ern-bundle-store-metro-asset-plugin'], + babelTransformerPath: require.resolve("react-native-svg-transformer"), + }, +}; +`; } diff --git a/ern-composite-gen/src/generateComposite.ts b/ern-composite-gen/src/generateComposite.ts index 41a9dd7d0..4c5cc84ef 100644 --- a/ern-composite-gen/src/generateComposite.ts +++ b/ern-composite-gen/src/generateComposite.ts @@ -330,6 +330,7 @@ You should resolve the following version mismatches prior to retrying.${os.EOL}` blacklistRe, cwd: outDir, extraNodeModules, + reactNativeVersion: rnVersion, watchFolders: localMiniAppsPaths, }); if (semver.gte(rnVersion, '0.57.0')) { diff --git a/ern-container-gen-android/src/AndroidGenerator.ts b/ern-container-gen-android/src/AndroidGenerator.ts index 0328a6357..2aee67617 100644 --- a/ern-container-gen-android/src/AndroidGenerator.ts +++ b/ern-container-gen-android/src/AndroidGenerator.ts @@ -388,7 +388,12 @@ You should replace "${annotationProcessorPrefix}:${dependency}" with "annotation log.debug('Patching hull'); const files = readDir( config.outDir, - (f) => !f.endsWith('.jar') && !f.endsWith('.aar') && !f.endsWith('.git'), + (f) => + !f.endsWith('.jar') && + !f.endsWith('.aar') && + !f.endsWith('.git') && + f !== '.gradle' && + f !== 'build', ); const pathLibSrcMain = path.normalize('lib/src/main'); const pathLibSrcMainJniLibs = path.normalize('lib/src/main/jniLibs'); diff --git a/ern-container-gen-android/src/hull/build.gradle b/ern-container-gen-android/src/hull/build.gradle index 65f3fbe31..b2aa52a7f 100644 --- a/ern-container-gen-android/src/hull/build.gradle +++ b/ern-container-gen-android/src/hull/build.gradle @@ -5,9 +5,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:{{{androidGradlePlugin}}}' -{{#isKotlinEnabled}} classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:{{{kotlinVersion}}}' -{{/isKotlinEnabled}} } } diff --git a/ern-container-gen-android/src/hull/gradle/wrapper/gradle-wrapper.properties b/ern-container-gen-android/src/hull/gradle/wrapper/gradle-wrapper.properties index bc60d1fcf..37a6725dd 100644 --- a/ern-container-gen-android/src/hull/gradle/wrapper/gradle-wrapper.properties +++ b/ern-container-gen-android/src/hull/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/ern-container-gen-android/src/hull/lib/build.gradle b/ern-container-gen-android/src/hull/lib/build.gradle index 0b3378708..5a42f1612 100644 --- a/ern-container-gen-android/src/hull/lib/build.gradle +++ b/ern-container-gen-android/src/hull/lib/build.gradle @@ -1,7 +1,5 @@ apply plugin: 'com.android.library' -{{#isKotlinEnabled}} apply plugin: 'kotlin-android' -{{/isKotlinEnabled}} android { namespace "com.walmartlabs.ern.container" diff --git a/ern-container-gen/src/reactNativeBundleAndroid.ts b/ern-container-gen/src/reactNativeBundleAndroid.ts index 084dc565d..1b86cfacd 100644 --- a/ern-container-gen/src/reactNativeBundleAndroid.ts +++ b/ern-container-gen/src/reactNativeBundleAndroid.ts @@ -43,6 +43,7 @@ export async function reactNativeBundleAndroid({ platform: 'android', resetCache, sourceMapOutput, + workingDir: cwd, }); return result; } finally { diff --git a/ern-container-gen/src/reactNativeBundleIos.ts b/ern-container-gen/src/reactNativeBundleIos.ts index 65a547108..ebb422544 100644 --- a/ern-container-gen/src/reactNativeBundleIos.ts +++ b/ern-container-gen/src/reactNativeBundleIos.ts @@ -56,6 +56,7 @@ export async function reactNativeBundleIos({ platform: 'ios', resetCache, sourceMapOutput, + workingDir: cwd, }); return result; } finally { diff --git a/ern-core/src/ReactNativeCli.ts b/ern-core/src/ReactNativeCli.ts index 050c8a42b..202a246ff 100644 --- a/ern-core/src/ReactNativeCli.ts +++ b/ern-core/src/ReactNativeCli.ts @@ -9,7 +9,6 @@ import log from './log'; import kax from './kax'; import util from 'util'; import semver from 'semver'; -import os from 'os'; const ex = util.promisify(exec); const sp = util.promisify(spawn); @@ -89,7 +88,9 @@ export default class ReactNativeCli { } const initCmd = `init ${projectName} ${options.join(' ')}`; - if (semver.gte(rnVersion, '0.77.0')) { + if (semver.gte(rnVersion, '0.81.0')) { + return execp(`npx @react-native-community/cli@15.1.3 ${initCmd}`); + } else if (semver.gte(rnVersion, '0.77.0')) { return execp(`npx @react-native-community/cli@15.0.1 ${initCmd}`); } else if (semver.gte(rnVersion, '0.60.0')) { return execp( @@ -123,9 +124,7 @@ export default class ReactNativeCli { const shouldUseCommunityCliForProject = await this.shouldUseCommunityCliForProject(workingDir); - let bundleCommand: string; - if (shouldUseCommunityCliForProject) { - bundleCommand = `npx @react-native-community/cli bundle \ + const bundleArgs = `\ ${entryFile ? `--entry-file=${entryFile}` : ''} \ ${dev ? '--dev=true' : '--dev=false'} \ ${platform ? `--platform=${platform}` : ''} \ @@ -133,18 +132,28 @@ ${bundleOutput ? `--bundle-output=${bundleOutput}` : ''} \ ${assetsDest ? `--assets-dest=${assetsDest}` : ''} \ ${sourceMapOutput ? `--sourcemap-output=${sourceMapOutput}` : ''} \ ${resetCache ? '--reset-cache' : ''}`; + + let bundleCommand: string; + const execOptions: any = { cwd: workingDir }; + if (shouldUseCommunityCliForProject) { + // RN >= 0.77: Use npx @react-native-community/cli (ships metro plugin via RN itself) + bundleCommand = `npx @react-native-community/cli bundle ${bundleArgs}`; } else { - bundleCommand = `${this.binaryPath} bundle \ -${entryFile ? `--entry-file=${entryFile}` : ''} \ -${dev ? '--dev=true' : '--dev=false'} \ -${platform ? `--platform=${platform}` : ''} \ -${bundleOutput ? `--bundle-output=${bundleOutput}` : ''} \ -${assetsDest ? `--assets-dest=${assetsDest}` : ''} \ -${sourceMapOutput ? `--sourcemap-output=${sourceMapOutput}` : ''} \ -${resetCache ? '--reset-cache' : ''}`; + // RN < 0.77: Use the project-local react-native CLI from node_modules + // The composite project's react-native dependency ships its own CLI version + // that includes the bundle command (via cli-plugin-metro) + const localCliBin = workingDir + ? path.join(workingDir, 'node_modules', '.bin', 'react-native') + : 'react-native'; + bundleCommand = `${localCliBin} bundle ${bundleArgs}`; + // Older Metro versions use md4 hash which is unsupported in Node 17+ (OpenSSL 3) + execOptions.env = { + ...process.env, + NODE_OPTIONS: '--openssl-legacy-provider', + }; } - await execp(bundleCommand, { cwd: workingDir }); + await execp(bundleCommand, execOptions); if (!(await fs.pathExists(bundleOutput))) { // Under some circumstances, Metro bundler process might fail // with some logs, but exit the process with a non error status code. @@ -209,17 +218,19 @@ ${resetCache ? '--reset-cache' : ''}`; stdio: 'inherit', }); } else { - spawn( - path.join( - cwd, - `node_modules/.bin/rnc-cli${os.platform() === 'win32' ? '.cmd' : ''}`, - ), - ['start', ...args], - { - cwd, - stdio: 'inherit', - }, + // RN < 0.77: Use the project-local react-native CLI from node_modules + // The project's react-native dependency ships its own CLI version + // that includes the start command (via cli-plugin-metro) + const localCliBin = path.join( + cwd, + 'node_modules', + '.bin', + 'react-native', ); + spawn(localCliBin, ['start', ...args], { + cwd, + stdio: 'inherit', + }); } } @@ -329,22 +340,37 @@ ${resetCache ? '--reset-cache' : ''}`; const tmpDir = createTmpDir(); const tmpScriptPath = path.join(tmpDir, scriptFileName); - // Check if we should use @react-native-community/cli for RN 0.77+ - let command = `${this.binaryPath} start ${args.join(' ')}`; + // Determine which CLI to use based on RN version + let command: string; + let useCommunityCliLatest = false; try { const packageJsonPath = path.join(cwd, 'package.json'); if (await fs.pathExists(packageJsonPath)) { const packageJson = await fs.readJSON(packageJsonPath); const rnVersion = packageJson.dependencies?.['react-native'] || '0.60.0'; - if (semver.gte(rnVersion.replace(/[\^~]/, ''), '0.77.0')) { - command = `npx @react-native-community/cli start ${args.join(' ')}`; - } + useCommunityCliLatest = semver.gte( + rnVersion.replace(/[\^~]/, ''), + '0.77.0', + ); } } catch (e) { // If we can't determine version, use legacy approach } + if (useCommunityCliLatest) { + command = `npx @react-native-community/cli start ${args.join(' ')}`; + } else { + // RN < 0.77: Use the project-local react-native CLI from node_modules + const localCliBin = path.join( + cwd, + 'node_modules', + '.bin', + 'react-native', + ); + command = `${localCliBin} start ${args.join(' ')}`; + } + await fs.writeFile( tmpScriptPath, ` diff --git a/ern-core/src/android.ts b/ern-core/src/android.ts index f531cec3d..ac4f748e9 100644 --- a/ern-core/src/android.ts +++ b/ern-core/src/android.ts @@ -16,16 +16,16 @@ export const DEFAULT_ANDROID_GRADLE_PLUGIN_VERSION = '7.0.4'; export const DEFAULT_RN_GRADLE_PLUGIN_VERSION = '0.0.6'; export const DEFAULT_ANDROIDX_APPCOMPACT_VERSION = '1.1.0'; export const DEFAULT_ANDROIDX_LIFECYCLE_EXTENSIONS_VERSION = '2.1.0'; -export const DEFAULT_BUILD_TOOLS_VERSION = '35.0.0'; -export const DEFAULT_COMPILE_SDK_VERSION = '35'; -export const DEFAULT_GRADLE_DISTRIBUTION_VERSION = '8.11.1'; +export const DEFAULT_BUILD_TOOLS_VERSION = '36.0.0'; +export const DEFAULT_COMPILE_SDK_VERSION = '36'; +export const DEFAULT_GRADLE_DISTRIBUTION_VERSION = '8.14.3'; export const DEFAULT_JSC_VARIANT = 'android-jsc'; -export const DEFAULT_KOTLIN_VERSION = '2.0.21'; +export const DEFAULT_KOTLIN_VERSION = '2.1.20'; export const DEFAULT_MIN_SDK_VERSION_PRE_RN64 = '19'; export const DEFAULT_MIN_SDK_VERSION_POST_RN64 = '21'; export const DEFAULT_MIN_SDK_VERSION_POST_RN77 = '24'; export const DEFAULT_SUPPORT_LIBRARY_VERSION = '28.0.0'; -export const DEFAULT_TARGET_SDK_VERSION = '35'; +export const DEFAULT_TARGET_SDK_VERSION = '36'; export const DEFAULT_SOURCE_COMPATIBILITY = 'VERSION_17'; export const DEFAULT_TARGET_COMPATIBILITY = 'VERSION_17'; const ANDROID_DEVICE_INFO = ` @@ -54,16 +54,16 @@ export function resolveAndroidVersions({ androidGradlePlugin, androidxAppcompactVersion = DEFAULT_ANDROIDX_APPCOMPACT_VERSION, androidxLifecycleExtrnsionsVersion = DEFAULT_ANDROIDX_LIFECYCLE_EXTENSIONS_VERSION, - buildToolsVersion = DEFAULT_BUILD_TOOLS_VERSION, - compileSdkVersion = DEFAULT_COMPILE_SDK_VERSION, - gradleDistributionVersion = DEFAULT_GRADLE_DISTRIBUTION_VERSION, - kotlinVersion = DEFAULT_KOTLIN_VERSION, + buildToolsVersion, + compileSdkVersion, + gradleDistributionVersion, + kotlinVersion, minSdkVersion, reactNativeAarVersion, sourceCompatibility = DEFAULT_SOURCE_COMPATIBILITY, supportLibraryVersion = DEFAULT_SUPPORT_LIBRARY_VERSION, targetCompatibility = DEFAULT_TARGET_COMPATIBILITY, - targetSdkVersion = DEFAULT_TARGET_SDK_VERSION, + targetSdkVersion, reactNativeVersion, }: { rnGradlePlugin?: string; @@ -95,22 +95,33 @@ export function resolveAndroidVersions({ rnGradlePlugin ?? getReactNativeGradlePluginVersion(reactNativeVersion!); const resolvedAndroidGradlePlugin = androidGradlePlugin ?? getGradlePluginVersion(reactNativeVersion!); + const resolvedBuildToolsVersion = + buildToolsVersion ?? getDefaultBuildToolsVersion(reactNativeVersion!); + const resolvedCompileSdkVersion = + compileSdkVersion ?? getDefaultCompileSdkVersion(reactNativeVersion!); + const resolvedGradleDistributionVersion = + gradleDistributionVersion ?? + getDefaultGradleDistributionVersion(reactNativeVersion!); + const resolvedKotlinVersion = + kotlinVersion ?? getDefaultKotlinVersion(reactNativeVersion!); + const resolvedTargetSdkVersion = + targetSdkVersion ?? getDefaultTargetSdkVersion(reactNativeVersion!); return { rnGradlePlugin: resolvedRNGradlePlugin, androidGradlePlugin: resolvedAndroidGradlePlugin, androidxAppcompactVersion, androidxLifecycleExtrnsionsVersion, - buildToolsVersion, - compileSdkVersion, - gradleDistributionVersion, - kotlinVersion, + buildToolsVersion: resolvedBuildToolsVersion, + compileSdkVersion: resolvedCompileSdkVersion, + gradleDistributionVersion: resolvedGradleDistributionVersion, + kotlinVersion: resolvedKotlinVersion, minSdkVersion: resolvedMinSdkVersion, reactNativeAarVersion, sourceCompatibility, supportLibraryVersion, targetCompatibility, - targetSdkVersion, + targetSdkVersion: resolvedTargetSdkVersion, }; } @@ -470,9 +481,48 @@ export function androidEmulatorPath(): string { return 'emulator'; } +function getDefaultBuildToolsVersion(reactNativeVersion: string): string { + if (semver.gte(reactNativeVersion, '0.81.0')) { + return '36.0.0'; + } + return '35.0.0'; +} + +function getDefaultCompileSdkVersion(reactNativeVersion: string): string { + if (semver.gte(reactNativeVersion, '0.81.0')) { + return '36'; + } + return '35'; +} + +function getDefaultGradleDistributionVersion( + reactNativeVersion: string, +): string { + if (semver.gte(reactNativeVersion, '0.81.0')) { + return '8.14.3'; + } + return '8.11.1'; +} + +function getDefaultKotlinVersion(reactNativeVersion: string): string { + if (semver.gte(reactNativeVersion, '0.81.0')) { + return '2.1.20'; + } + return '2.0.21'; +} + +function getDefaultTargetSdkVersion(reactNativeVersion: string): string { + if (semver.gte(reactNativeVersion, '0.81.0')) { + return '36'; + } + return '35'; +} + // ERN Android plugins supports backward compatibility until react native version 68. function getGradlePluginVersion(reactNativeVersion: string): string | never { - if (semver.gte(reactNativeVersion, '0.77.0')) { + if (semver.gte(reactNativeVersion, '0.81.0')) { + return '8.11.0'; + } else if (semver.gte(reactNativeVersion, '0.77.0')) { return '8.7.2'; } else if (semver.gte(reactNativeVersion, '0.72.0')) { return '7.4.2'; @@ -490,7 +540,9 @@ function getGradlePluginVersion(reactNativeVersion: string): string | never { function getReactNativeGradlePluginVersion( reactNativeVersion: string, ): string | never { - if (semver.gte(reactNativeVersion, '0.77.0')) { + if (semver.gte(reactNativeVersion, '0.81.0')) { + return '0.81.5'; + } else if (semver.gte(reactNativeVersion, '0.77.0')) { return '0.77.2'; } else if (semver.gte(reactNativeVersion, '0.72.0')) { return '0.72.11'; diff --git a/ern-core/src/injectReactNativeVersionKeysInObject.ts b/ern-core/src/injectReactNativeVersionKeysInObject.ts index 09017c023..068a72a30 100644 --- a/ern-core/src/injectReactNativeVersionKeysInObject.ts +++ b/ern-core/src/injectReactNativeVersionKeysInObject.ts @@ -11,6 +11,7 @@ export function injectReactNativeVersionKeysInObject( RN_VERSION_GTE_60_1: semver.gte(reactNativeVersion, '0.60.1'), RN_VERSION_GTE_61: semver.gte(reactNativeVersion, '0.61.0'), RN_VERSION_GTE_77: semver.gte(reactNativeVersion, '0.77.0'), + RN_VERSION_GTE_81: semver.gte(reactNativeVersion, '0.81.0'), RN_VERSION_LT_54: semver.lt(reactNativeVersion, '0.54.0'), RN_VERSION_LT_58: semver.lt(reactNativeVersion, '0.58.0-rc.2'), RN_VERSION_LT_59: semver.lt(reactNativeVersion, '0.59.0'), diff --git a/ern-core/src/iosUtil.ts b/ern-core/src/iosUtil.ts index 129adea7c..720313b5a 100644 --- a/ern-core/src/iosUtil.ts +++ b/ern-core/src/iosUtil.ts @@ -582,7 +582,9 @@ export const getDefaultIosDeploymentTarget = (rnVersion: string): string => { export const getReactNativeCodegenVersion = ( rnVersion: string, ): string | null => { - if (semver.gte(rnVersion, '0.77.0')) { + if (semver.gte(rnVersion, '0.81.0')) { + return '0.81.5'; + } else if (semver.gte(rnVersion, '0.77.0')) { return '0.77.2'; } else if (semver.gte(rnVersion, '0.72.0')) { return '0.72.8'; diff --git a/ern-core/test/android-test.ts b/ern-core/test/android-test.ts index 314ddd18a..d2bdc319d 100644 --- a/ern-core/test/android-test.ts +++ b/ern-core/test/android-test.ts @@ -209,6 +209,28 @@ describe('android.js', () => { }); describe('resolveAndroidVersions', () => { + it('should return all default versions if no versions are provided [>= RN 0.81.0]', () => { + const versions = android.resolveAndroidVersions({ + reactNativeVersion: '0.81.0', + }); + expect(versions).deep.equal({ + androidGradlePlugin: '8.11.0', + rnGradlePlugin: '0.81.5', + androidxAppcompactVersion: '1.1.0', + androidxLifecycleExtrnsionsVersion: '2.1.0', + buildToolsVersion: '36.0.0', + compileSdkVersion: '36', + gradleDistributionVersion: '8.14.3', + kotlinVersion: '2.1.20', + minSdkVersion: '24', + reactNativeAarVersion: '0.81.0', + sourceCompatibility: 'VERSION_17', + supportLibraryVersion: '28.0.0', + targetCompatibility: 'VERSION_17', + targetSdkVersion: '36', + }); + }); + it('should return all default versions if no versions are provided [>= RN 0.77.0]', () => { const versions = android.resolveAndroidVersions({ reactNativeVersion: '0.77.0', @@ -216,19 +238,18 @@ describe('android.js', () => { expect(versions).deep.equal({ androidGradlePlugin: '8.7.2', rnGradlePlugin: '0.77.2', - androidxAppcompactVersion: android.DEFAULT_ANDROIDX_APPCOMPACT_VERSION, - androidxLifecycleExtrnsionsVersion: - android.DEFAULT_ANDROIDX_LIFECYCLE_EXTENSIONS_VERSION, - buildToolsVersion: android.DEFAULT_BUILD_TOOLS_VERSION, - compileSdkVersion: android.DEFAULT_COMPILE_SDK_VERSION, - gradleDistributionVersion: android.DEFAULT_GRADLE_DISTRIBUTION_VERSION, - kotlinVersion: android.DEFAULT_KOTLIN_VERSION, - minSdkVersion: android.DEFAULT_MIN_SDK_VERSION_POST_RN77, + androidxAppcompactVersion: '1.1.0', + androidxLifecycleExtrnsionsVersion: '2.1.0', + buildToolsVersion: '35.0.0', + compileSdkVersion: '35', + gradleDistributionVersion: '8.11.1', + kotlinVersion: '2.0.21', + minSdkVersion: '24', reactNativeAarVersion: '0.77.0', - sourceCompatibility: android.DEFAULT_SOURCE_COMPATIBILITY, - supportLibraryVersion: android.DEFAULT_SUPPORT_LIBRARY_VERSION, - targetCompatibility: android.DEFAULT_TARGET_COMPATIBILITY, - targetSdkVersion: android.DEFAULT_TARGET_SDK_VERSION, + sourceCompatibility: 'VERSION_17', + supportLibraryVersion: '28.0.0', + targetCompatibility: 'VERSION_17', + targetSdkVersion: '35', }); }); @@ -239,19 +260,18 @@ describe('android.js', () => { expect(versions).deep.equal({ androidGradlePlugin: '7.4.2', rnGradlePlugin: '0.72.11', - androidxAppcompactVersion: android.DEFAULT_ANDROIDX_APPCOMPACT_VERSION, - androidxLifecycleExtrnsionsVersion: - android.DEFAULT_ANDROIDX_LIFECYCLE_EXTENSIONS_VERSION, - buildToolsVersion: android.DEFAULT_BUILD_TOOLS_VERSION, - compileSdkVersion: android.DEFAULT_COMPILE_SDK_VERSION, - gradleDistributionVersion: android.DEFAULT_GRADLE_DISTRIBUTION_VERSION, - kotlinVersion: android.DEFAULT_KOTLIN_VERSION, - minSdkVersion: android.DEFAULT_MIN_SDK_VERSION_POST_RN64, + androidxAppcompactVersion: '1.1.0', + androidxLifecycleExtrnsionsVersion: '2.1.0', + buildToolsVersion: '35.0.0', + compileSdkVersion: '35', + gradleDistributionVersion: '8.11.1', + kotlinVersion: '2.0.21', + minSdkVersion: '21', reactNativeAarVersion: '0.72.0', - sourceCompatibility: android.DEFAULT_SOURCE_COMPATIBILITY, - supportLibraryVersion: android.DEFAULT_SUPPORT_LIBRARY_VERSION, - targetCompatibility: android.DEFAULT_TARGET_COMPATIBILITY, - targetSdkVersion: android.DEFAULT_TARGET_SDK_VERSION, + sourceCompatibility: 'VERSION_17', + supportLibraryVersion: '28.0.0', + targetCompatibility: 'VERSION_17', + targetSdkVersion: '35', }); }); @@ -260,21 +280,20 @@ describe('android.js', () => { reactNativeVersion: '0.64.0', }); expect(versions).deep.equal({ - androidGradlePlugin: android.DEFAULT_ANDROID_GRADLE_PLUGIN_VERSION, - rnGradlePlugin: android.DEFAULT_RN_GRADLE_PLUGIN_VERSION, - androidxAppcompactVersion: android.DEFAULT_ANDROIDX_APPCOMPACT_VERSION, - androidxLifecycleExtrnsionsVersion: - android.DEFAULT_ANDROIDX_LIFECYCLE_EXTENSIONS_VERSION, - buildToolsVersion: android.DEFAULT_BUILD_TOOLS_VERSION, - compileSdkVersion: android.DEFAULT_COMPILE_SDK_VERSION, - gradleDistributionVersion: android.DEFAULT_GRADLE_DISTRIBUTION_VERSION, - kotlinVersion: android.DEFAULT_KOTLIN_VERSION, - minSdkVersion: android.DEFAULT_MIN_SDK_VERSION_POST_RN64, + androidGradlePlugin: '7.0.4', + rnGradlePlugin: '0.0.6', + androidxAppcompactVersion: '1.1.0', + androidxLifecycleExtrnsionsVersion: '2.1.0', + buildToolsVersion: '35.0.0', + compileSdkVersion: '35', + gradleDistributionVersion: '8.11.1', + kotlinVersion: '2.0.21', + minSdkVersion: '21', reactNativeAarVersion: '0.64.0', - sourceCompatibility: android.DEFAULT_SOURCE_COMPATIBILITY, - supportLibraryVersion: android.DEFAULT_SUPPORT_LIBRARY_VERSION, - targetCompatibility: android.DEFAULT_TARGET_COMPATIBILITY, - targetSdkVersion: android.DEFAULT_TARGET_SDK_VERSION, + sourceCompatibility: 'VERSION_17', + supportLibraryVersion: '28.0.0', + targetCompatibility: 'VERSION_17', + targetSdkVersion: '35', }); }); @@ -283,21 +302,20 @@ describe('android.js', () => { reactNativeVersion: '0.63.0', }); expect(versions).deep.equal({ - androidGradlePlugin: android.DEFAULT_ANDROID_GRADLE_PLUGIN_VERSION, - rnGradlePlugin: android.DEFAULT_RN_GRADLE_PLUGIN_VERSION, - androidxAppcompactVersion: android.DEFAULT_ANDROIDX_APPCOMPACT_VERSION, - androidxLifecycleExtrnsionsVersion: - android.DEFAULT_ANDROIDX_LIFECYCLE_EXTENSIONS_VERSION, - buildToolsVersion: android.DEFAULT_BUILD_TOOLS_VERSION, - compileSdkVersion: android.DEFAULT_COMPILE_SDK_VERSION, - gradleDistributionVersion: android.DEFAULT_GRADLE_DISTRIBUTION_VERSION, - kotlinVersion: android.DEFAULT_KOTLIN_VERSION, - minSdkVersion: android.DEFAULT_MIN_SDK_VERSION_PRE_RN64, + androidGradlePlugin: '7.0.4', + rnGradlePlugin: '0.0.6', + androidxAppcompactVersion: '1.1.0', + androidxLifecycleExtrnsionsVersion: '2.1.0', + buildToolsVersion: '35.0.0', + compileSdkVersion: '35', + gradleDistributionVersion: '8.11.1', + kotlinVersion: '2.0.21', + minSdkVersion: '19', reactNativeAarVersion: '0.63.0', - sourceCompatibility: android.DEFAULT_SOURCE_COMPATIBILITY, - supportLibraryVersion: android.DEFAULT_SUPPORT_LIBRARY_VERSION, - targetCompatibility: android.DEFAULT_TARGET_COMPATIBILITY, - targetSdkVersion: android.DEFAULT_TARGET_SDK_VERSION, + sourceCompatibility: 'VERSION_17', + supportLibraryVersion: '28.0.0', + targetCompatibility: 'VERSION_17', + targetSdkVersion: '35', }); }); @@ -314,19 +332,18 @@ describe('android.js', () => { expect(versions).deep.equal({ androidGradlePlugin: '7.4.2', rnGradlePlugin: '0.72.11', - androidxAppcompactVersion: android.DEFAULT_ANDROIDX_APPCOMPACT_VERSION, - androidxLifecycleExtrnsionsVersion: - android.DEFAULT_ANDROIDX_LIFECYCLE_EXTENSIONS_VERSION, - buildToolsVersion: android.DEFAULT_BUILD_TOOLS_VERSION, - compileSdkVersion: android.DEFAULT_COMPILE_SDK_VERSION, - gradleDistributionVersion: android.DEFAULT_GRADLE_DISTRIBUTION_VERSION, + androidxAppcompactVersion: '1.1.0', + androidxLifecycleExtrnsionsVersion: '2.1.0', + buildToolsVersion: '35.0.0', + compileSdkVersion: '35', + gradleDistributionVersion: '8.11.1', kotlinVersion: '1.4.0', minSdkVersion: '15', reactNativeAarVersion: '0.72.0', sourceCompatibility: 'VERSION_1_9', - supportLibraryVersion: android.DEFAULT_SUPPORT_LIBRARY_VERSION, + supportLibraryVersion: '28.0.0', targetCompatibility: 'VERSION_1_9', - targetSdkVersion: android.DEFAULT_TARGET_SDK_VERSION, + targetSdkVersion: '35', }); }); diff --git a/ern-runner-gen-android/src/AndroidRunnerGenerator.ts b/ern-runner-gen-android/src/AndroidRunnerGenerator.ts index e9905605a..b5db0fcdd 100644 --- a/ern-runner-gen-android/src/AndroidRunnerGenerator.ts +++ b/ern-runner-gen-android/src/AndroidRunnerGenerator.ts @@ -59,6 +59,7 @@ export default class AndroidRunnerGenerator implements RunnerGenerator { getPackageFilePath(config), 'RunnerConfig.java', ); + shell.mkdir('-p', path.dirname(pathToRunnerConfig)); shell.cp(pathToRunnerConfigHull, pathToRunnerConfig); await mustacheUtils.mustacheRenderToOutputFileUsingTemplateFile( pathToRunnerConfig, diff --git a/ern-runner-gen-android/src/hull/app/build.gradle b/ern-runner-gen-android/src/hull/app/build.gradle index f29216550..941288be2 100644 --- a/ern-runner-gen-android/src/hull/app/build.gradle +++ b/ern-runner-gen-android/src/hull/app/build.gradle @@ -92,6 +92,15 @@ android { configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0' } +{{#RN_VERSION_GTE_77}} + // For RN >= 0.77, the React Native Gradle Plugin automatically adds + // com.facebook.react:react-android. The electrode container already provides + // it via com.walmartlabs.ern:react-android, so exclude the com.facebook.react + // version to avoid duplicate classes. + configurations.all { + exclude group: 'com.facebook.react', module: 'react-android' + } +{{/RN_VERSION_GTE_77}} // Needs this for okio issue (should be more restrictive to only okio) lintOptions { disable 'InvalidPackage' @@ -102,6 +111,18 @@ dependencies { // Recompile this dependency on every build as it can be updated at any time (snapshot) implementation('{{{groupId}}}:{{{artifactId}}}:1.0.0') { changing = true } implementation "androidx.appcompat:appcompat:{{{androidxAppcompactVersion}}}" +{{#RN_VERSION_GTE_77}} + // For RN >= 0.77, hermes-android is still needed for the native libhermes.so, + // but we exclude react-android from it since the container already provides it. + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") { + exclude group: 'com.facebook.react', module: 'react-android' + } + } else { + implementation jscFlavor + } +{{/RN_VERSION_GTE_77}} +{{^RN_VERSION_GTE_77}} // The version of react-native is set by the React Native Gradle Plugin implementation "com.facebook.react:react-android:{{{reactNativeVersion}}}" if (hermesEnabled.toBoolean()) { @@ -109,4 +130,5 @@ dependencies { } else { implementation jscFlavor } +{{/RN_VERSION_GTE_77}} } diff --git a/ern-runner-gen-android/test/AndroidRunnerGenerator-test.ts b/ern-runner-gen-android/test/AndroidRunnerGenerator-test.ts index be5cedebc..653224045 100644 --- a/ern-runner-gen-android/test/AndroidRunnerGenerator-test.ts +++ b/ern-runner-gen-android/test/AndroidRunnerGenerator-test.ts @@ -127,3 +127,44 @@ describe('Test AndroidRunnerGenerator for RN version 0.77.x', () => { ); }); }); + +describe('Test AndroidRunnerGenerator for RN version 0.81.x', () => { + const fixtureRunnerPath = path.join( + __dirname, + 'fixtures', + 'simple-android-runner-rn-81', + ); + const generatedRunnerPath = tmp.dirSync({ unsafeCleanup: true }).name; + process.chdir(generatedRunnerPath); + + const generatorConfig: RunnerGeneratorConfig = { + extra: { + androidConfig: { + artifactId: 'runner-ern-container-dummy', + groupId: 'com.walmartlabs.ern', + packageFilePath: 'com/walmartlabs/ern/dummy', + packageName: 'com.walmartlabs.ern.dummy', + }, + }, + mainMiniAppName: 'dummy', + outDir: generatedRunnerPath, + reactNativeVersion: '0.81.0', + targetPlatform: 'android', + }; + + it('should generate simple-android-runner fixture given same configuration', async () => { + await new AndroidRunnerGenerator().generate(generatorConfig); + assert( + sameDirContent(fixtureRunnerPath, generatedRunnerPath), + 'Generated Android Runner project differs from simple-android-runner fixture', + ); + }); + + it('should re-generate configuration of simple-android-runner fixture given same configuration', async () => { + await new AndroidRunnerGenerator().regenerateRunnerConfig(generatorConfig); + assert( + sameDirContent(fixtureRunnerPath, generatedRunnerPath), + 'Generated Android Runner project differs from simple-android-runner fixture', + ); + }); +}); diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-77/app/build.gradle b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-77/app/build.gradle index e35d1bee3..b3d236cd8 100644 --- a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-77/app/build.gradle +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-77/app/build.gradle @@ -92,6 +92,13 @@ android { configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0' } + // For RN >= 0.77, the React Native Gradle Plugin automatically adds + // com.facebook.react:react-android. The electrode container already provides + // it via com.walmartlabs.ern:react-android, so exclude the com.facebook.react + // version to avoid duplicate classes. + configurations.all { + exclude group: 'com.facebook.react', module: 'react-android' + } // Needs this for okio issue (should be more restrictive to only okio) lintOptions { disable 'InvalidPackage' @@ -102,10 +109,12 @@ dependencies { // Recompile this dependency on every build as it can be updated at any time (snapshot) implementation('com.walmartlabs.ern:runner-ern-container-dummy:1.0.0') { changing = true } implementation "androidx.appcompat:appcompat:1.1.0" - // The version of react-native is set by the React Native Gradle Plugin - implementation "com.facebook.react:react-android:0.77.0" + // For RN >= 0.77, hermes-android is still needed for the native libhermes.so, + // but we exclude react-android from it since the container already provides it. if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") + implementation("com.facebook.react:hermes-android") { + exclude group: 'com.facebook.react', module: 'react-android' + } } else { implementation jscFlavor } diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/build.gradle b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/build.gradle new file mode 100644 index 000000000..1c8d4fdaa --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/build.gradle @@ -0,0 +1,121 @@ +apply plugin: 'com.android.application' +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" + +/** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. + */ +react { + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '../..' + // root = file("../../") + // The folder where the react-native NPM package is. Default is ../../node_modules/react-native + // reactNativeDir = file("../../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen + // codegenDir = file("../../node_modules/@react-native/codegen") + // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js + // cliFile = file("../../node_modules/react-native/cli.js") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + // + // The command to run when bundling. By default is 'bundle' + // bundleCommand = "ram-bundle" + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] + + /* Autolinking */ + autolinkLibrariesWithApp() +} + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'io.github.react-native-community:jsc-android-intl:2026004.+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = "io.github.react-native-community:jsc-android:2026004.+" + +android { + compileSdkVersion 36 + buildToolsVersion "36.0.0" + namespace "com.walmartlabs.ern.dummy" + defaultConfig { + applicationId "com.walmartlabs.ern.dummy" + minSdkVersion 24 + targetSdkVersion 36 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + // Need this to avoid build conflict with jsr version which comes with react-native + configurations.all { + resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0' + } + // For RN >= 0.77, the React Native Gradle Plugin automatically adds + // com.facebook.react:react-android. The electrode container already provides + // it via com.walmartlabs.ern:react-android, so exclude the com.facebook.react + // version to avoid duplicate classes. + configurations.all { + exclude group: 'com.facebook.react', module: 'react-android' + } + // Needs this for okio issue (should be more restrictive to only okio) + lintOptions { + disable 'InvalidPackage' + } +} + +dependencies { + // Recompile this dependency on every build as it can be updated at any time (snapshot) + implementation('com.walmartlabs.ern:runner-ern-container-dummy:1.0.0') { changing = true } + implementation "androidx.appcompat:appcompat:1.1.0" + // For RN >= 0.77, hermes-android is still needed for the native libhermes.so, + // but we exclude react-android from it since the container already provides it. + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") { + exclude group: 'com.facebook.react', module: 'react-android' + } + } else { + implementation jscFlavor + } +} diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/proguard-rules.pro b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/debug/AndroidManifest.xml b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..e8f828b56 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/debug/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/AndroidManifest.xml b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..ce9ca54a5 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainActivity.java b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainActivity.java new file mode 100644 index 000000000..2b58c7725 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainActivity.java @@ -0,0 +1,27 @@ +package com.walmartlabs.ern.dummy; + +import androidx.annotation.NonNull; + +import com.ern.api.impl.navigation.ElectrodeBaseActivity; + +// This is the main activity that gets launched upon app start +// It just launches the activity containing the miniapp +// Feel free to modify it at your convenience. + +public class MainActivity extends ElectrodeBaseActivity { + @NonNull + @Override + public String getRootComponentName() { + return "dummy"; + } + + @Override + protected int mainLayout() { + return R.layout.activity_main; + } + + @Override + public int getFragmentContainerId() { + return R.id.fragment_container; + } +} diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainApplication.java b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainApplication.java new file mode 100644 index 000000000..035c70206 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/MainApplication.java @@ -0,0 +1,19 @@ +package com.walmartlabs.ern.dummy; + +import android.app.Application; + +import com.walmartlabs.ern.container.ElectrodeReactContainer; + +public class MainApplication extends Application { + @Override + public void onCreate() { + super.onCreate(); + + // Add additional plugin configuration below + ElectrodeReactContainer.initialize( + this, + new ElectrodeReactContainer.Config() + .isReactNativeDeveloperSupport(RunnerConfig.RN_DEV_SUPPORT_ENABLED) + ); + } +} diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/RunnerConfig.java b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/RunnerConfig.java new file mode 100644 index 000000000..b20c045b6 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/java/com/walmartlabs/ern/dummy/RunnerConfig.java @@ -0,0 +1,17 @@ +package com.walmartlabs.ern.dummy; + +import com.walmartlabs.ern.container.miniapps.DummyActivity; + +// +// GENERATED CODE: DO NOT MODIFY +// +// Do not modify the content of this file as it will be regenerated +// every time a run-android command is executed. +// See https://native.electrode.io/cli-commands/run-android + +final class RunnerConfig { + static final Class MAIN_MINIAPP_ACTIVITY_CLASS = DummyActivity.class; + static final boolean RN_DEV_SUPPORT_ENABLED = false; + static final String PACKAGER_HOST = "localhost"; + static final String PACKAGER_PORT = "8081"; +} diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/layout/activity_main.xml b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..a098c03ae --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-hdpi/ic_launcher.png b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b8bf1a9839d794793d298e50d76f2ba7895e821b GIT binary patch literal 4690 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 U-+&q_xBvhE07*qoM6N<$f>fRPR{#J2 literal 0 HcmV?d00001 diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..0abb1a387a75c1d0ec0d68b3624d677fb2d465c4 GIT binary patch literal 6795 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 literal 0 HcmV?d00001 diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-mdpi/ic_launcher.png b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2f04b41cf5f52fc5efc594459559421b8b49f114 GIT binary patch literal 2498 zcmV;z2|f0SP)myC~_zW%+`C;$LsDH)1Xx;tMZDe>FIv`_y7Ip_gMZz;ErrmwA9((*nP_mka>v0g!LSFa<#4?mNcT!QM5Yrmil?V1TWG-fA#P z;Ey?R#-HLf?ugE#$HqT#4ljwn-zc1jkUWEtQ_;jix4W+X_MB@O85ME_rU2-@0wTY9 zR$V)Zf3VpH2q4TTDpyW1pGQXka6n8M!~ob>HA&4m{rArR)UqJt0LX8f9z#DZsIRZL zl?xStn76JeZwPV}-ZKH5_Z;VK-isQorsBc*-E9F>vf*S3fL+%ilS(+BO2bAbRB*ar zNCSVHU{N8I*f5cYj~T1;VZ?`5{>5~A0FQqSK+CRvpA<9Uu8e;HhsA}%=%h>rXdtgV`2+4^mw z@{u7r^$MC^k zbjrk8t8xDFFK}%27KKa{nHK&5-uL&x`JZyo&(j?vLl>a7t{zTp>|xc^lIFv`yhq3@ zEWydW>)_(#i0bMZc=|`8vg)~DI==ew`L5an?gKdh0tTjI0%&dj7A8*^iSWSTh>1`Pq=tENq`W=lH0`{BG<>l0(C z2GE%TV95^a46%D|ST+s)dwC!rcs?GNm5UD-nif~D%utS?4~F2+bHd>F(Hs;Mm5RK{ z42Mz=;GK!a5Ry|sp0sh-NMat@xr#QZm}SW_*PB+Jmuc6+7T>4GBYFEFY~H&6rOC^c zEfie(r@B7yM+N|YvpF!+BR)jbIS<%8m zkNCxrwDFO3!qoX2aPU|blWNQwfuS5^f@%OA2ZV|qFrhd(rPFGW6c+{mfxS`n>^a6n zEWz!&`7c$TXSjO37CVy`!n=1DN-YMCorS8ZYJooTbX!;)ae=2EfR7P?m8)_Yqn@+jqD@I&}y~t8ZnhBO2B>+6aYdD*+IOpIgM*x$5^Nd?=s z;d6<+)Ls9-ua?EUc96iZSrsn~rZ zzX6`uo;Y73@5_|ESe>-{)c~~bZv-G8J-WDIU&>ONc>FkZ_9}vB#PK^*>^exc8NjSC zxC$FK&L45}Cke91x*{O>3;dju`}zQ|79&z81`fyKs1Vw?$awa=8hrw$ay*{dxs$j; zsXRH8v|=Xh2V{_9uwYdxcI-WFQuzjjkZZpQCOyDK0Xn(1qt#>X)Iex78Z3!VLt6TG zLc9xE!|WIFNy3-Nwhk?E`oKmsvCt!K(=Hr5nuR-D6EufFbq=rqB%DZAmXcP^#OPt( zD1Gu2BZ3zo|BNU3pe8UDfP-X z41gE$fGH-#8H+)|S1H1g7DWYP)KG6pnPtsOwqXeKjQw&u@*b)Sn?~h;vsaK(x(THP z;UaT}i<1L}zSEmBO|oVtBfqc|XR@#1Sms6K<~>p!GV+P4bHKTe6o4ct74=xUx&l)vo#0GVzH%Vw?)Zayn?mNp{+jkP&9C@K;~ z!|bUx+T0S;Rn^s0{k!CD)-u znR`!6&Xe^b`H0lB@k+ePo#cfAc{52q3a9`6uLiGT+ShUK8}EVt1GHY)e5e&-)c^nh M07*qoM6N<$fnzN2zvtYUd*|L^2GRQGd!J_>;NJJXbAIRi&U#_+f4-Q1S$;ZC z_|VbP^Em)k`}fiB|H}HO0C-{B_a5S_R0eb?)|a&|Gh3Q)oHfE~MKy5n;y8|Almf_A zD3GOO*-Kha)tUTXg}Mw&-i{iopENV-WX-IItfdn z3i=d*I0JC(VHm*6Q+>_HTRkuJ!0O!qEYAYuSpXiz zAUrEO!wy!dRO_zxNfuE8vhu8s#TAK&k9QoA6iN4c6vC3kZ@kce<^KTTf*fT zVggY z0iqHFin#zzg8BJ)Zn|<}^ZONns0e^ZiyjG!3XAn0in_ETZ~zeziBTu|rMkFvCkF*Z zC1TWhw{IuB+b0fP2TZL50EeRJ06%Zd(mztROaVYqs@!r1fQ{)kYIw21vXC8zWrtUmk*Odl-g+ub0Q@KU21C zbmbGS05CCegBs~L)vsoY#Z%CB#lqYCAh?P@4sTn4?R$@5>AF33s&Lr4Vk#cx6=LP) zeYkZyTL!?D(Dn@?NY+E4_tThTGEOF6aSpMr0H~w8j5uL1T3WgjzES-MC=?2$U%4qu zSp9o-K-D0B)ThLo$@p14}D^qW!ZtnoVDCLne0Jd3|;qR6jty>()UCzlqueHJaDZ_Zv&RP03wtsgF zo!T@-V1O_Bz7~rKv%kXPnWM4u`x6MO9*nWA}j+==4TBDJ;ex zf8B;gqsGCcPf@paD2}F_!-&a=;CKu+s@mfhuM9seJLKA#Z?;LPBn7|#A=*YA-?(5h zTk1K2pu=c%*y0(Z(6dWRUJ3MtA533~*3Dmnzppn6i%M`ZEdx7NO@o(K1C!Z|y!;|8 z->?_gGw-8&$L2iE)G8%3Y9)U?s%|(ACe7#1Ga5~ZYCjZalf@+fm6E-F=eLw-AX_I` zK?*<-9XF_t&ZI~dO(ZF?1dTL|tc@?`j6ryfsz};%6rV2NZrd(|Spc6*7>Mi#c{qRh zI#z!+9x<;c!0MDgY>#m8@z&zpk*|1AYqlQ5f)zWQ>L$4*yi|DWW?J%IAyZ2Ms2jE) z`kmRrb(eBXFrh#x0n@VC?<1~FG%WnYTBxev#eH5Eeb7o znauTV8mSf%h$GuR!cwz$d}|W)#1+QqBbx&IfWp8FG>VxzI{^NDzW>T(=9p5|Knu1XUC9*kwx{fm1iQi&k|@QiFT z@Q4+Pb`q%_ymfL4p*f+;o!d6!9rfaso2XGe2vw{2OLx2c{qogJ1PA&d^KK3XBrK5A z&na};BZQ;JpoWCuQvSZUhkR8p^snBLv4bvKt*GsiI(D;21-JVkBEqZT`^|GjZBrsj zNxh7-=l(!;?qi-B6gtTwJ>p^z;O`@Xnw|JHHtswk^Bs5Gmuf=6;CA-K1OR@K zZ3h2s;W%wMl}Q{^8eYjas#gufx9eviBshS-bu#TTNT@7|CgtiTK&w$<*nhfX-0*ll zY?@4F44<5c6Q|Q%#(h`Xr)vrYblDe@YXB$|00h)+Jt)uNz|Ok1i!L!Ql@dEw&p@+A zFY-6nZ99lXU+n_5n688uI6!w_Z4!ws%O>+Vps=VEUEi6C`#F!q+DTF`id~(vVsq1z zs{nW+00?}c)xgJY$tw}urU3^1dw0a#NkjNY_Wf`MAI@3hXdz`4t0Sg5YAX(HTQtGe z6;t?<^B(&h4%Wt62c2W5@)@Kes8n`b$XYtX5p9AOIY*ueiW7HWqm_=#d5mb z^gT7D0Q~E;9B>g}YYDt_eu!mRY+3dZTD{Uhc5CgngIKs~r%0PYeLKU`Q_UwQ5=_uX z`<6}cO5=K1xBU=L8(J^a4#n}^OL&V4E8|)g;)l;dsm|b*5Dct$a?-zz22dbaz^8We zw+|{_tA z1{(zc9=^U|5rI*$8DJD@S5J-{@EWF#8z8rU#ezm1M?yyya4t8T1^_%hNpui`?WV-Z z=-U1j*}2meZp7wYKe`6MS&dJ!(i$0y?q^Y>F91*g@DFR+cejU96DPNV?W_EJyl^OK zKEgtSWe4{iIS1!1{l#CChDosql=cDkO@i>`11G;*hB`H?i)Uut%|Vy`Q&FO$NK}4V zO@?C+|2WW(a)7iNrJbI^k!|~H{lhjo+DZ8VwZcO1`HWF${&FNAziF-CaTxQKQ7MG(A$YMlhDoP2jU|QE@5Sy*Uwi`GwLp+K$JOP#ottI;=0}k41dd0v?mJ~|X;~m`Zo0L96&n*NkT4iDexW!=stAFhDCfTgnWr~V5hvK&c`CtM zp+9Ytq2RxU>sbc@Q)% zaYY$FA1%fV?uGXT_JC69flGhh!keS!g2Hh{i?dn{CApV-mOi|3*3NzLcvpihmLgJ> zy0N1@{c6l7ij*UgsK4{GEg=8TlzJmq+Y`P+{dt3tO)S)#>)*~K=+O@ z{1A)Q>EEwl7%yE_1Mof2BL zs`a}jDz*N7%AN0`V)gabBEDN2bZ*xSk#)lPij~%*yaN1{c^^kp&V#aSQHeO0st~M6 zSFktl`cLHP)FDy5QjQGn00{ozNlqOc759lsTV;q4b>*kH3YAWNQ$CngC^$vGGF|?b z{2RyT+MU)`U%OZp0T4hCX@mVES`OCw*O&%|)i^f{&L@lSy($*d!2kYCN_ebhc7@3BfvZE|oI`L6N^I1W~`@wTz}!J5LmztPN- zT3bp~m3nVnSpb4SRP>Q^(`=-QZ&-9El~>ibSd})0VLix7m0q01TxK!pel07>-BWb` z($4^Bs8DQoR^eX~o_gN10uZc0KuBPUnZ8O--(b(ch*qp;KvPz!smHJ$p$y|eQv(VD zwDcTj&f_fRY>UZo-J*YTL7$&>)}$|@&{#x`iJdMa_%pfu^8gUEBDAAKEdoQ%P9L(6 zk|uyOz_4#7!H5zjyN1az=|gc{pvp4|E*0XbW~#&n0SpN&{Rj#o;RpnMgnuQVYtJRL bRG$9b0RsG0cilFvIJ83@o5(DF9jeCI3sYjAx59zsm1U&Cgi?>_QI-X%&>Mc+vM`o+q?UOngzo2Ahw~j=ib`>?hsl>UGlCjJMeg zpGnuqSL$@krt46BCU=)z5Uh8Bo*Memk6SlbT^I2_US59%`uj%Ty!z+-KYrZxNCtxd zv24x)K-%tAH?(IFk96t3zWd;D(Zocxf2SrOnuKO1B0;Ni5D1jXk{5+u5qNy$tGQ?L z!0Ml8AF>7z?um9hZSeB)Le}7*bDnte=FdAnzW^Xn2Eri-&HzBycoivEJvdL{DhKaA zd|XuNQ8ZvSXpshSifq*AR{;Q3;5tjzAYlf8VyFbdlfVC{asK?FdolGX)VIF0se zIF3y-dvM^m6ML3U0}v;JU}^=<0N@QEpkm|jL(gLqN^{yT;$YqcB*oBkw~o^tQjOe! zUf2c#N-`y-8~|0XREwsc{L^{=dH%=M)d9o+NZ{3v$HEE#ru_iYmut}DT4Lf0A4wi! ztFodVPH0K62>sIx&lhQ7`b24BK~uZfdzrfs}2Co=-RR9TmUE{igiRo&H&&CAXDjj z-L4q8L>9bt7|MxR5LK#D)^oqkeXx6z7X4_Rt+zS@HS&CEN{x1X;T?!pajqSU&I8~f zfak6NAam)u?_Jh=61|gBBuk80)tk&<#}-f*PF@dya;d zQV2j^01w;?fKk$_z#MSA%2-LG9z{52fJBYyg~}C5;Puvn5ErNVK1r}DCVI+K12;}3 zq#HCh>!<68I_BOqf1|pUF>g|DmLDAT(K4*rw9jP# z80=0T_P!JV>W~xWZP^45ZD6V4QSIH%bAO(kS@F#mAF&kd8*PW+^0nJK0HnSKhPT2S zwJRcPa7OIfe-y)~Emg;%*LGnN&z%2Fxu4e;E@|j`3rGS0A}1%}c#gU>5r`J%w;NW+ zjM3rj(ryE1;JcrGvxBN7s%U_fj7d2qDT9ts8zKr3o!{fA0KbT#!<2n=+UkjTE1BejoS}H&TPTh8$BI8 z21nt*;gdW7Cb^%oB?}?ELo@jLcw^J9L)gCW2y8ECG{!8fmiCMWrH0Qgw}6thy9!pq zI+2!>xcpBTH?d%9Kg7i+p!dj6kj~c!->#d973+3mdGv0?#>UH` zs|_y*0G&fFRV+WgS}+P3(g#S!Z37mr-ik?c))-PADoa`i5pDv2!(U6TI#btil?~|H zrV&1jY|C9ozkIQIKSoVo&OZNm{0C_AdKK=PMXR@A+Waq3p-d4(FBpx^{ib2=gh*t{ zm>xU7J&L}g=i%7S1(>sB0~W8@&hA|?dnmIOY6%I6c=RL&4<9|nlbC0?edhss42ePl z?daKTSUPhM>eqUWduDum0;+~a;`UuiwG& zs7L!|Y>n{GnrLh2cxDwT9RtAoJGUHrNFHh8|Rvr}Jdw6)@(c`CR)@dYe+`1=pdeZ!*j_Zb$ zXU=lV?jP*}8yL|Fzy5w6dw%%Ea_iGBOBoQqbiUZSauSLa%7gn4A7jegwb;7nCp=ct z9h|1~-rFjKcD)5?05C+&R)QDocug4G1z~U3V}fMPbksZ~zR>O5S#C9|mdA!*7>7x; zA_EZl-a8l^(VBHKbkZWMW%(oHLepTEg4~b(@h%6TI0L}huv1J)+PiaQ55~4tlaV3N zpK)!kVY9LKhvO<2>nEvL9XA9c_i~V!4cBI4$-V8LPhpPv^tsD;v(pH~#mAcf;6VEY zMF%9O>&L%xZ92Mmt%p^e#-Cv)YhqunW+Rw2l-+)Wa*S)P+1Q68z#B1L5iEfz3M) zqR;4gY_X>6UJ);6l|0pmH;$;U8}0u^T`1>Mvj;yE?QjV>zNt;Qov9WPDa^f^joxQ}I=nIWMQ3Wfl$ak-qid;Fe zu!R}L`&Z-?w=)3nbAO2d6cbp0#1$Tf$}1~?w0|eTe>Sxr>eZ;ggnsUyYY6Q!5^-@7 zA5)`jXScRZKs#e4isXmCAC)SJ8zuS9{Cx$-PoBlfb$f97+$A|Ym7Y4FXG`?$-kkmX z(flv*$+FGX)FZ3CDEKe~#N`$s1i&o5HlZBBjxM`0f9~wqvSK20h}32+T8~ebZ9>T+ z`Ov3Zb2O;+8ry12PCN0(c`W^62Mb+G7b}1*%O}9w+Y1-3+(e^xA0p;itY!EsOuCsk zUnO7U9so$-y0D+yA4sC$wG$f_8HVodnzA0AJ&(ioeTVUGvSeK5-UcQ84Cu0BUryM?t0(V*tQR=cNm^$t+qF(WZL7+}WIx zHwlr#SNfNHLsBf{z>$;a)MpwJ6RCpSIRNy+=kAk7tgYB{3jmgaw?}J^uM}0%QCfKJ z#NH@G$v8nvNKC}RqkrJ1W2bQH>_r^<`43Rml0C@=mL07dQURrkf@ovoH2u;YvSlF zyAQFF6iQcUo1?vF0-<}`Ca7JlybuTqdB;Vql+w}~b>;$GlkpmBlgSeKp}Q9VIrx#D z>S1(Z1}fs_$mI-ZMZ9szIAqI`$sl}6MSnPXF^i0hU7BpJ^W28U^(tfh;4a9KHM60Q z=?kJUm(?06<1=!9QmIFIhjAdtR|Hp7QFIlM5j;;3U6(oh*=BQWA3s|f{7W6Y&Gm*z8~a8#RPSim6Bh6SuZj9}wZ!dQgE3JnLeJE}9hP@a%c~Q~<5Y?*6y}VQa zbjt%#-HHSZ?QHpYvygG>@a_nGBZLzKr4d^69EWGm=uCrF9wxSLFJ3mpBsyWLuJu19 z3bLIvT8t@;!bi3Rc~;tja*983h>ls52Db;*^-O|ADmgv{L1^1lu7q8>ay@xEsUGdd!oVjq-ao8zb z39DVY9)J+Z2k1nC{YK9>?9`xd8}0Frlp)_4XWXj ziIH~78W**SCD%AhlYgOf#>T~CQKm#e_6f_Zb{>HzF>;NlCf=vb{jDn|vNX6^qxsNI zow^5Ya&Sb@fy*hVaELhoMqeON&$3yAQM+n6hr*{nlBNwB|Cz9wdErO>(XdV>dmld> z`5o;eCkp{6Q8+Jlt(nFp@Thw3@bOc+iZ~kr{QVdWQ8~M#cJlP!Xxd@8ydH6!+j27n zb-2u;9b@`mFn$|?GX>$>^-=Z|v!h84pSnakP$6J8@*Vwqstz-1;X2G&yg{}UzSpdo zgRp4;VJ4^b0u$gEO!JG`!I9y8+Ts1q#(GulplNTJC`fxW%9%;I0f6?#4H*Z~ zXr`b*e78P|ZGv01R^j7u^u%8pN)dN#rTKaUtxoJr8{QoqS~PGtyjyo4p!!>VK&A9a zX)Xt#V72z9wV`GMn?I#5n$)XoIqv>rKgEU}Kd9GP?KSI=5XJe9s7JYe?femJ^Ttt& z-tsN_j+t*c2mJ-E2cW8I0al|?G>>+-wyv0jKzXy>?7n5uyD)a;NYe?$emL?FrpvdgNIL0zl~G~oYeM`0g!xyC}-2WX-&)+74C4sLlp|-=#)KL zqc7k;F%XpQ17`rBVlX<&)i?fP0&Lxa0lfPp$$VY zeoz;d4i+`qn+@$e5`UhNBB7*my$X*33BEr~8O8@)-@)+S#uGbCc(?Ck$i#*C=6k7X zB00_F02E*pB%Ywv0O>B;dZcq*baaRg#p$!5v`0I7#tObGrzyu^Gtvi!T}!FMKz~1c zyM89Cu(RK3v*Fmuv)F&=1eUDbi3gA9T}#Ptt_Pq>JIh>;y^g7ZTTzbgMjMbbdoW8^Xiw=-a&N@6Wv-CBy$`nnU@BIN zWRdnhIy1a`%`^n~(;Ly$HfF{OmW$__lTMb`dd+Y0{dCTZjw3a!UD4h>mA$;)Y7jf_ z>dNMF0P;JcAh|q6m`yX?prixVO);`>d(Iya9rXHe4m&lY614uuq-j14kG3Gk4d{ff zVU0Q7A3tlA^!fuAH}?SGd^(g(M;I<@oP)2gH!Dl2qRU9qz5pE=+OS<(oT>dJP4J2n zrj7pzL%O2fJN3B=463pV>ot)bgLQRtJph&4S~_9V%!Glnq$}zFbmn){(($0z(r6nU zuwK1!FWVMWHfjt)k{>7pNREK0`eM$w4^XLmaqjl3*YBWN=MlJhTT_nWLKI#K0Ol@M zo(UJtsH(3AicTrg&Y5U)gv4S^zGI*Qt| z$2gpkUy^ zpb|M@UUHT`z=V6$`%G-a2IiE*JHE-b46U-MX0jklp|`Poy7FsgF)y>Z0e~>)i*p?a zUiy={;I%@ctLRN9?caHw<&Y|tFV6Bfj@r{_&vERxv-s|(U$J__z7*$lk_(#40mxe^ z%-m~Pn1W?7hasvFBS^U;+Ulg!l5}!XsW+mRGTnXfh@GA}dHMq4<8>!rk}Jg&+~-~Z zECp^E_i%<_?yPxatgaK)C#67!DZ17508})$0K;2ToOZtY3!Po*@&La|f>%c7Y5+3j zeXaH1HV;o9X*uPz`xR2YQImE3nNkuDm@_q+DN^HP-fXkk;&1-Cu8=F=o}MvJg?IPC z%hz!knWgh}g~rpX2`pC_$rPQ7ZhH~;*Nxvczb*riqAzfudMNe{8re(M8{!j~eSmO? z&IL7^Ta!vP@~u`c0dbN1Qrb;i%-xyy&g`2me}jg@FY>WEhE4!bX>)p?z)X3w6sonw z%QqmuNRP!^!X{Lup%{lJ?PaQavPbO0%k;Vzdgmp* z>ODo@qC|Zw-=st(Zb9Du8FFUGS*C-xf2KyBUOoi?4?$grV=rpS;OqkFD$8q~Lei}l zCD;<;FUCKAuq)=)sa5gM9?{kseRr45^|Dl3LjRI)AbL{1 z)YGlAd__Aa{UCZFnjvRPLZ|=e`@!PS&tUz={PR0 zzY1O}6GhMp7|Op+A(|2arsQ6y2KO(z$SG|X%_mKWsf=ngc?LZX&)d(K#*PprHeE{dPj;B5dlTIARt9S5e1Qs^j<>f zA-!+1*=+fr`*z;!)GbMX|98&!4k4S}nKy6l@AiA&tOEWwUMmF@ul4HxyEyze0pRIc zZT}7UdU{i@;-2W5xWDCI3)h20=lcukrr{09*%MixOW)Mn-CCH0f4V za*TD?cb(6!ym`?tiA#OR^~@2F)x$e zqPbrO0F>a!>B=_UN7Yt&`SdsB=CwEE3jYhL!Iqx-&<0^^l|@G1ddIlWv|OMUffb-QI7&BL+`#;B~U9J@B5|1$)0 z5MP4(iS`lLS%CyF8j342_G>Vw`TOd@&)55+kGJ}p*bAq2$Hbh=1po_2RlRf|UIhRw z;j1@p<5#9!?V;JZrZH(5*~LxysFocBVadr5))fG({&yk)e2f^05#XlLs3FMTC*I%3 zYsHIax7OV}b2#f&0r4^c;HnyR``(j=Waj2gPD{^@Fq=`QbM!gO@qE^o2ZX^*AOVg) z8Cenuh{%ZWBtorLL2#hoivYcL!JoUAuLl5JDB6mbX0Trt05~t|cy*heqZ*hj+Vv@E znUzf@JK;IXMj!z%7XZ92R|VNu!UqLEN8=q5`$`{s9O0fFD8Uo7de#xLN`8(JC^_%;yY1+e!hAL3G!VYd-wdDXE)Eh6tz^8 z08rwqn|B^k&8G6(nUa=S$zriM$Rwj`L^2^X!XleMz0#rufL#YiwW(A}2n`Onr-7Uv zrw?ts#YjVusidL;fT|o#yWSHAq-EwTPR}&>a%>~dfoC~a#@pcu3**Z0-BDI~IMjj1 z5+SXA?2^j*W31!`1^8wM`+HCLd+*AP0D#^DwGD+*Nkstw&Y=PTP3sTG&q_?mnvj=g z;w?(-EqbQwrMw-H0(!{+;0<|sX&^i_VDYK_t7b4DP?xp9AQTn=Lj2$g74&tZI{anYSb!-3=7(P`{eJVQd46v zfGHFRg#myNzjV!-eif^<+MJM**}-B#sdV4V5y4VO04kR&3EwXI6oyP#1~HGGQ%&OV zx`b|N0RX@?tCUKJ2n+Z%?%K(IPo7-o8fT9sp`ZY;oL{F-$8GV+86B)vzFiV}IXso& zf$kUE19|Uf?9i?-azH1TxpXsZ-hG5a4A<_blmV9Y!fXJT)`%c?tk)a9e)x+3fh_%<*=$BX9==Y%BD7 zJW)O2A%U=F(Wmg$`aN*s>@^O|4$N_WAH6sHv3(&F4-1B~mu^F^5%c*0A7_bD>#<9$ z6!D#_RJBS4k;MX*oH@8=Is<}7-jOE&u&(C2T}Ka2&NP1QDzcR$wCI+c=>D$ln!>^< zAHnKP2VnWS-2$i`@j%5lO2980=aQ#zogu0*3!ULsX0O0%>Ifn&! zk34tyyYD@9QQZZA23eZ7+V`)KWA^?#*J$!}#raaMB9Hh&0!VlvD`t;?cJDNRljm>1 zfU#fljT|TY`ChBWux!RBaQw_QXjr!@wCphf;*(P40g$@3g#S-ft1u4X`AIeay|*^o zPitv@>Dcxg91vU@WlsQ5moNWjP*}BQC(|>tD{^O+axLwImQw7_+)k=i?C0rpS~#_T zCHVPxLsoV!M78|{tXwt0x$yL{ec?YX8o;u3yNSef8#)^haj`We^{_s_B zknjEE$CsMK$6QY5M9fY>a0dX^=r((Q^uolHtWi9pCD8YB9K%0MCJ+-;y*jpT3`?hf z0#|Q6fLhhcLyPX?;AvbEdqZ|C>~kI4wG_@>z6~3H`U4Jbo(EGFZh#&8k4hxpJTbmJ zHsTbC1U8Su2oa$Ht1kYr{&RPYvO54^R#W@-djq30a@Bv?%Y&56!WRPai*zsNOgB`( z$~hw;I;t8>n70nrEgB0$CoY4dr?7y1-IdTTB99ai@4*mnv zmSEO^?;{AapX|p@46snboh1Ra8Vv;dDBrzwbjxXuQI?egR{-GWY5?$V)M3QG=~+3I z@C}zLM}!bSbp7h^PIPThs+4f@+;u`ot~%isd~tq1UvKzr%L2G`BL==)y#s#Vz7UqL z-vjHnAL1NpUrF2M^#N@~`+i@*{fEzC>#ENoz~2Wt^qb1Nap&HT0_xPL01fI?ft0ii z_~po1FdFmt__2cPM1lbzFu?cTtz#SN0|2IhnS!=72F?JWUXQj}#}UI4Gjf*75nj&E zrB_-4}qSn>T{hX@JGMT6Q^VB6P|VbZ+yaQOHIIJ9Lxoci|$ zOkVIk^z76E%9ad=g{yavxyFC;0d#H?4Q+c*226dA`KSwg+@}N7Z95EdbL~XrDH93P zG@yHHnD%KOz@iL}d$G@8_~aGjx2yz6d2ft{iwyN0ck#%EH5^qWiGVWzNI|7c)u@or zGW9PRa`UhiL@;>1fY2!-hes3(f+IT@1Ljb;0}JmR2Tp@~vCoO0IJj3k;_c888WaGb z!T!*=<0#0;%7I;Lrvs+8$Ie^>2Y#4CIDF=^&9HUPpRj59Bv2>-`i@>iPH)pJ3cgt| z2Cm$E0MA||L3*YE^78T_&tw8D`o}zsgFjDPVkNNB8ztbt#<}3F)AH7M{_-98VAvdB zQ!K)ovlIZ#F+O@-eEzeWbss;zn8GROh(M47fO5aC$$KAub}z z9;}=_LK6KMOEq_5k@0u1s+X4*v>Fv;X6Ld8_UzmO7EKu< zT4Pd5Iz)FG14g4gz3!?4C+u6&dutQ2VoudcOnjIoCk0XxK)K&5y8Vy=safXLA{|ec zDpE-lCdUn9dU*Yk&!B08n!FoCUEQ$#2r!#D6*G2Tk!(SusA{lv<>z3`GeOsnX2IRq zr|`qF3DC4*O~^LnLY>whg9ZDE3K025gayOl9~VJ@pAT=1-~adt{vNk?wF($$N_+!kG^i3p~nolraB_la7B0lK&Y=j?%f{VZ`Tw(1VB*G0~$4T z75s7hqGNiYm%*7wulIt>hu6Yir!EuYh>}pbd@0zoZU$Vw^#J;e#M}=JnHtaYI%hv9K9Q1_T^nOH=XS0Ey-s|%H(_32r0M-sf9+4CPsD8W} zwd~n2!>m6>y3|~9yx;&?{~uuHXZ@g8mv_hs51+7PLN4sVlpS8dn}UvJzGIUMh)FaV(E z7wltde*MH=?5;p5;1JZ&5KEUtqh9aY?+#p+YqEVL;(pE>c16L744e?2QY<1o1orulo$m?D{@C8Y_HIJ?Z8^4-Jq%!u&3uyh}B*-&KHH>lA#_MEp z{2_#yuE$rWS|4+E$2cY~;H9jE5`cee0Km6atD#qnMpG#%0JuihA@|M%h3~KR?cNHe zjp;*9z{tAqs0DE8`hA&9C#zT-f+*n*lee50U*5+IWxTW+IIwXJRH;y!xSAhLSPFlg zxFq5C3nupv0KHE8H1_Pa+5nI(G{!;z&{@~kY0)h@*W&vp)>(LwulNpm_=rsdpYZf^ zyz!sbPJ?O{%aHT0-+4&97?$&x`xOB#GO&!dBw>?eQx0Tq`w1flb|#(`j=#@bg@I$g zBtWp!N!cVJ@ggNsx@ z5AzZF{NFAdOG*yHFe0mlp+#IJVysHoGE=8 zd*ZU0!{EJEjmS~xmUbRA9UebR5Eau|0x|@_V9MX$2e1eq6zB)J#yoiRGy$H!NCs?) zAw0}i*$l9bH`gv23vF9qx(498?T29YS6fBtbJ1P!1)7b_gaRn)+Qwv>R(0ax`5m1A zz`)cC$Z1>vNY>NG$0zWO20da;`4(>%^b>z9=k5uQWHweH7w+3In{XkHGZ$~cpwE^7 z+cnLchi&97n$#vff2DGzplXHEtmFu%PDn~4>FaZs@4)f1*C6KMbB;=}ld40@MzDJR zX!81bd@{7@^*Ll_89dbejHn9xeVJUBa9vuBIydFkfpP|e0c!;q*%5Du3jpeWuUZY; zH_X+99_3CTp<CsR;@ItN-6@(Q9CCzGj818)GQOJ4_ZR8J&(Ns{;w^EZ{^K1%@AbZB)bb;G1VWJ(^bwYSM zfc8T>wuvV7T$Yb)HsY5T^*{-u^I}Q^iGS@D6TorSBbQ|4d1Y>@9_~G;!Mys}mAzkZ zqhhWE5dXi*TYWZKK>40W0hS!4gq!FjIFpJYW;82TkPJIGzyPFWWWkf?iI9<*P0Eu< zNNgi7T_TLMrc@{!$=VcW0Pg$!6pWs>nxA5mV;Hymeu*tpf(2-l)?c1p+B1NO2gt5X z3IG~l1i-&)vwpvs%@D;sSH>9?-=8avXU^dEY^qc$nEq)W_^``6Y{5o2F{TCfA3g

mqlD1_!{K)!u-<@3(>`4XT4ije;#6FA`JWqw&i~3d4ag zZ&r>w%*rM`KoAj0?_m>ORjY!FPcH6ii%uWyoZte0$~K_t+x^eyTWqC05`RwQB5$y{ z{=I#6)H0YG>eIEQRBnDF;V{&Zm%6;3Y@H_$#|g0071Uq&~m}K!*kW3QhXitI))~ad5a(Z%24Fsfdwt zjNV&EGNKrW2?s`{SZpW76_GxZ-e&6H3o+rj$Y5P!!?N*EzgA_@br-Dq5ms;7&l6R5 zRFALSm1F?GI;RMLpbF9bp1M>ia#xWgycoK1L%YN90UbrNV7+(DwAEnW zvydA0(|v+GZXvx1?iH&#F$v1q*V?fiUehNa=>wu z==<1ZxA(i5fE%>AWAm;*NJpKJ^QF0*pYe2;W-b9J*QnP$g;M2~5thqN3K!F9D#>K-&gXagiAAh1GouhTYA+1*e<03i5Ne1PEk<;q0DmtPDa z9cRwQUnegSpWI!}cd7H~L~`kH8$d{qKOEWdB@_z@kX_oG@elCtReO`KV_K)q zw(NXLh4o3?G`8r0oc{NwBmhc< z0>VOq$ZnLRlnlVf9Jm6&$6H4_9I^~Kkd>Vy%5qZPnmFtO7(LjY2$UQ6xSZirR>0xE zFBBR8mBM`K`Q^Ru$$3E}5G&vCgYRuhZ97LQ!hQdTswBMmy&Gnc_CZ$z(+RD5PUKa? zxGHDXxc<=leawa`;pD&9Veq)6fB_nhBRPN6u2!C;noCB6LVQvh>7>J!Mlx7aVt-L0 zA{74F^A$c%$mue%?WNP8>2Ul0W2f0pSNE#4nGVKX-H&y4Q5-;O0ho#?UAN0@wU^Jw zt|sG)B>(71!+XHTeLJ`{#im_^U;>9o(GJNt%K|`@yx5yr3H5t|>-a3R^ znM9E=%?0^I)@V6E=U05O)YQn~m_862U&qnd0(f-SQov>>cg9EKm%^VXFY!2(p4YQu zb6EHVzhiCw%Ize-&tYixGN`T&ZkY$wE0ty6d;B~RTKAkt+DxRfobx9ShJM{zxm;>y zRu0r|JrqzS6?B*lNfVOq|BdNrQ7(vfL--UgSFf=?yvjjxgRWJ*U@bPNTeA}EUWXvN z9vDG3?l_v=N+b-tuo8wHYZOfE2g0_Ir$XI5G z{UJ(_eqCF^tnvNbT4P3*0p98~hSYEh78dmB)zl%!GjPRtWY!qe-c6kz-M zTMcT$xy!d;^R7R^YUA}n@dB;Z&7w$)qdVin;qyrML_vnlYB45UJ6HoCFIlc0fC)Jy zdQjQ=-F7Ney2j!Q$rGNkB&Jxdu!eTo8;`)9h42^=xRwGeO7(Jm9HQP?m`h<*i#{ZPy z!eel^;>tPF?dZZ|5rF31$FZ9zBRPY*dRY8rgO^EE2p>y zSSSJ15aR<;gUdv9KcP@-BR#zsR;4zrm?&yTmzoFZ9NlRi6w6uVa zPbGM0@AfcbTtAn$dGN1u2la@1HJJk^=pt`es>D%xJl!;qu8k-9-gWk2Mz-0BvcOt;LB-4N!yFFf$b~p z`c5JJMgw|}3^NkOn%O@*xoq%|GYP++N=(E$-P_ev2F3608$7dQz5=CMP% zk}%&D2;27_g~V)lK#eMI$kG+t^JgvF0_(OB&)oB2vwUP|9Z;-N(|-D(QuD=>an1i$9UHLm z0Jn9$JmGoM2vQt$`kCYU0onlJz=F`fSMI>PmD}O6RNK4D5Sd$fV5H!JbZ#-7j~ z!{)k8cn8^C>3RV`9Erfk+8o`vn3t`+aP=N()V&+~j6}QzF}U0tvs&_#((fL5*JLuh zV0wYro=|$6RQnmeM|Q`fF)m)^ozY(Y#d&_3bU4Q3E}SHb@H~tYR?Qs=7_oB4$f;k$ zfy3yfNtS|n$2!{{%ZG$-eYu~__^dD4c}WNES;M_&`w!z228w2wvJ#f0KKN%9V|*od z&CB)wk&POd9o6UqN`zNw`MXl>RZMnSOz~c>VV!&9-d@Pjzd|^%t_Z#Em3@{r?$Ad?4(CWiU#1<9Buv+qx(jNTNCO;<~yG-z==o7Vg z)5`%sr2u1spkfu@8tffZdMe4zxk`s}rk6CT3V?T-)P@a9Cy1J*{yBS%RK{}i7$V5I zk7CUtpc&uTazDfedtgx>TNzpIx7wipr;Et$`Jx)8jOTMxAD%|{4$F^{J0$U1&H!L- z0eVD{wK^SAYxVN}nw09`5{l!dqD@#mZ#1-T*-&)9JNEw#Q@`9m9xdQFT_yx~29QMa zEb9F&D<(np%8qn3UIU-7GVJpe>^|edf?zS_K1{mxE4E-`;3dob&H$jFF&R<_2r60g zE#L5}+Z0NN*vi@h0f!2U%Xl8vWU)^l_vi}8@5layPiKB3ANISD45>7F`LdC)VaYhC zSPt8A90MDDQT5TSuZ1PP&1Qk@_`AIf2{+N8VcuMp``rNm`4(+~9~$IhRojH12W- zw!n1zcotl_QLqSC3aq@W#La0Bj?ZPXp4de!@_e}G$*CZE41P}2)M$_+LMt}kqt@!} z+Z*MSJoAB!;@}aqMRaXgJ%1EwF&7Tpv51eL+_2*}xF5^eY9xaQ_j*Wp%yfxWHV0e_vmTv(=O&$pOz9;H7z)-69L2i;E0dXm-?XWH2n05~}uC3^$%=(lfB?-#2{ zdL2=1IA5RlTSArcr2wCPE*w}0!ul@u02S4+S@LtT;;!_{NqK}78#KJ=cG8D@%U;GE z0Pq-Ukg>-kFt}W!-ul4OGeD`7+Qcfpn1t78x55K%1HX(~MCQ5;|bkhG*1(XiR9keBgvR{Ep!+Zf_=RgY7CbO!)x zE2t_W_8_EUv++9r@IeZNn8Sn`g8uDTiS(L~h}f=gXfH++C#bID8z=#cTHn;qkXi_2|ikY&OU@q#Q_zIff5JLXU^) zefr%qE@yLB0;m+wY$@6Uf6!<`!Yj1+O6?ugjBDgvak`8RR zqtS;2mT$6Hs}FAG@~c6mGYFjZNFRX4`K^XEp-%M*-?~#@( z2moB8j75AR38<1n$~PVByv=HXyzImu(qm69 zX9!;?;!{EvbX_z^Ll96B5Cp%#GWC1t0wOZA*J{=^HTTV($zR z9)k#4TJ-448svyq$Yqk#k&$T)0lO+tC80F<`V^}eCcw|g@Fw2m1ABzM?c*^xyte|~8h31Wd8euswxpo0loG11*<7H*A1XDv5CVjY{RTzL+tRbytX8m^b5ioNQhv;Sar-B;ISbuO z^y~458d~IfkH4hH)%srs09=(szG07P_Ckq3AoQU2_V*93(njMO+D)z1S5>GA|4blP zH!AhH)nWpRDd%>6cH-{LgnNgui{Fj+Fo~l8N+4+tJMrPvoYRm%sP>q8TX4ZuM-eYMnx%1_krI1D-Av zRg2AL2Ajof#11vHG3%n)kaEV5@&JjB{yTCwB|g5!_o%9QsbA#G)z_ZhS3!@bo)R_G z2n4Dp)ISnGYOOA$RC%o~u(DF?RaU9;id3kyVG5-xSfNk_gF?ZtW7=#+o6VAHvszMZ z7E_|tk{4$+|5YLtQp=x=?^6`<#MXq>9KTyLApy=@SFVbpghs+s zaPT*MAAi$;f-(>#8WNrUAYr*bT-EYgiT)~$usc#ny(X^r#N~1%w$$HT>7@YRZz=`c z-&}qES~y*f5U)c8xdRGam#g2xxwt@ZRTDk#m8utaZuI{EGTj(phxcl-00000NkvXX Hu0mjf7GY#z literal 0 HcmV?d00001 diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..96b1207b2b7543688267e58c1a504c4570e4b4ba GIT binary patch literal 12570 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 literal 0 HcmV?d00001 diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..72d49dde51747f11c0db8aca6f5109ed035d89a5 GIT binary patch literal 17977 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

h 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 literal 0 HcmV?d00001 diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/colors.xml b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/colors.xml new file mode 100644 index 000000000..3ab3e9cbc --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/strings.xml b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..8e15e878d --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + dummy + Welcome to dummy Runner App + Force close to reload ern mini-app bundle + diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/styles.xml b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..5885930df --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/build.gradle b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/build.gradle new file mode 100644 index 000000000..377d5cae2 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/build.gradle @@ -0,0 +1,26 @@ +buildscript { + repositories { + google() + mavenCentral() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:8.11.0' + classpath 'com.facebook.react:react-native-gradle-plugin:0.81.5' + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.20' + } +} + +allprojects { + repositories { + mavenLocal() + google() + mavenCentral() + jcenter() + maven { url 'https://jitpack.io' } + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle.properties b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle.properties new file mode 100644 index 000000000..a46a5b90f --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle.properties @@ -0,0 +1,41 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle/wrapper/gradle-wrapper.jar b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..943f0cbfa754578e88a3dae77fce6e3dea56edbf GIT binary patch literal 61574 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 ScNgau(U?ep-K_E5zy1%ZQTdPn literal 0 HcmV?d00001 diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle/wrapper/gradle-wrapper.properties b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e69d0402a --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew new file mode 100755 index 000000000..f5feea6d6 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew.bat b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew.bat new file mode 100644 index 000000000..9b42019c7 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/settings.gradle b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/settings.gradle new file mode 100644 index 000000000..317cb7d21 --- /dev/null +++ b/ern-runner-gen-android/test/fixtures/simple-android-runner-rn-81/settings.gradle @@ -0,0 +1,5 @@ +pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } +plugins { id("com.facebook.react.settings") } +extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } +include ':app' +includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/system-tests/fixtures/android-container/build.gradle b/system-tests/fixtures/android-container/build.gradle index e203a313e..57a28e86c 100644 --- a/system-tests/fixtures/android-container/build.gradle +++ b/system-tests/fixtures/android-container/build.gradle @@ -1,11 +1,11 @@ buildscript { repositories { google() - mavenCentral() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:7.0.4' + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.21' } } diff --git a/system-tests/fixtures/android-container/gradle.properties b/system-tests/fixtures/android-container/gradle.properties index 0566c221d..a46a5b90f 100644 --- a/system-tests/fixtures/android-container/gradle.properties +++ b/system-tests/fixtures/android-container/gradle.properties @@ -9,7 +9,8 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit @@ -22,3 +23,19 @@ org.gradle.jvmargs=-Xmx1536m android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true diff --git a/system-tests/fixtures/android-container/gradle/wrapper/gradle-wrapper.jar b/system-tests/fixtures/android-container/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..943f0cbfa754578e88a3dae77fce6e3dea56edbf 100644 GIT binary patch delta 36900 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

yHlr~Qj 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 GTKgBj+ffbx diff --git a/system-tests/fixtures/android-container/gradle/wrapper/gradle-wrapper.properties b/system-tests/fixtures/android-container/gradle/wrapper/gradle-wrapper.properties index 669386b87..37a6725dd 100644 --- a/system-tests/fixtures/android-container/gradle/wrapper/gradle-wrapper.properties +++ b/system-tests/fixtures/android-container/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/system-tests/fixtures/android-container/gradlew b/system-tests/fixtures/android-container/gradlew index 1b6c78733..65dcd68d6 100755 --- a/system-tests/fixtures/android-container/gradlew +++ b/system-tests/fixtures/android-container/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/system-tests/fixtures/android-container/gradlew.bat b/system-tests/fixtures/android-container/gradlew.bat index ac1b06f93..6689b85be 100644 --- a/system-tests/fixtures/android-container/gradlew.bat +++ b/system-tests/fixtures/android-container/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/system-tests/fixtures/android-container/lib/build.gradle b/system-tests/fixtures/android-container/lib/build.gradle index d48a3e1ba..d5d3be533 100644 --- a/system-tests/fixtures/android-container/lib/build.gradle +++ b/system-tests/fixtures/android-container/lib/build.gradle @@ -1,11 +1,13 @@ apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' android { - compileSdkVersion 31 - buildToolsVersion "31.0.0" + namespace "com.walmartlabs.ern.container" + compileSdkVersion 35 + buildToolsVersion "35.0.0" defaultConfig { minSdkVersion 19 - targetSdkVersion 30 + targetSdkVersion 35 } buildTypes { release { @@ -13,8 +15,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0' @@ -25,10 +27,15 @@ android { lintOptions { abortOnError false } + publishing { + multipleVariants { + allVariants() + } + } } dependencies { - api 'com.walmartlabs.ern:react-native:0.63.4' + api 'com.walmartlabs.ern:react-android:0.63.4' } gradle.projectsEvaluated { diff --git a/system-tests/fixtures/android-container/lib/src/main/AndroidManifest.xml b/system-tests/fixtures/android-container/lib/src/main/AndroidManifest.xml index 28d3c0d07..4bf2ab5c1 100644 --- a/system-tests/fixtures/android-container/lib/src/main/AndroidManifest.xml +++ b/system-tests/fixtures/android-container/lib/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/ElectrodeReactActivityDelegate.java b/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/ElectrodeReactActivityDelegate.java index 6846a8267..e99c7403a 100644 --- a/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/ElectrodeReactActivityDelegate.java +++ b/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/ElectrodeReactActivityDelegate.java @@ -191,7 +191,7 @@ private ReactRootView getReactAppView( ReactRootViewHolder rootViewHolder = mReactRootViews.get(componentName); if (rootViewHolder == null || newInstance || rootViewHolder.size() > 1) { - ReactRootView rootView = createRootView(); + ReactRootView rootView = new ReactRootView(getContext()); rootView.startReactApplication( ElectrodeReactContainer.getReactInstanceManager(), componentName, props); if (rootViewHolder == null) { diff --git a/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/plugins/BridgePlugin.java b/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/plugins/BridgePlugin.java index bb7bdbd99..9c3fb2820 100644 --- a/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/plugins/BridgePlugin.java +++ b/system-tests/fixtures/android-container/lib/src/main/java/com/walmartlabs/ern/container/plugins/BridgePlugin.java @@ -1,8 +1,8 @@ package com.walmartlabs.ern.container.plugins; import android.app.Application; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.facebook.react.ReactPackage; import com.walmartlabs.electrode.reactnative.bridge.ElectrodeBridgePackage; diff --git a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/gradle/wrapper/gradle-wrapper.properties b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/gradle/wrapper/gradle-wrapper.properties index a0f7639f7..e69d0402a 100644 --- a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/gradle/wrapper/gradle-wrapper.properties +++ b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/build.gradle b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/build.gradle index a23784c8d..0b6f015c0 100644 --- a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/build.gradle +++ b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/build.gradle @@ -1,11 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 31 - buildToolsVersion "31.0.0" + namespace "com.walmartlabs.ern." + compileSdkVersion 36 + buildToolsVersion "36.0.0" defaultConfig { - minSdkVersion 21 - targetSdkVersion 30 + minSdkVersion 24 + targetSdkVersion 36 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -15,8 +16,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } lintOptions { abortOnError false @@ -27,6 +28,6 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0' - implementation 'com.walmartlabs.ern:react-native:0.67.5' + implementation 'com.walmartlabs.ern:react-native:0.81.5' testImplementation 'junit:junit:4.12' } diff --git a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/src/main/AndroidManifest.xml b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/src/main/AndroidManifest.xml index 3511fd5b7..f2b369e3f 100644 --- a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/src/main/AndroidManifest.xml +++ b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/android/lib/src/main/AndroidManifest.xml @@ -1,2 +1,2 @@ - + diff --git a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/ios/Podfile b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/ios/Podfile index fbb1a3e71..b81272d2a 100644 --- a/system-tests/fixtures/api-impl-native/ern-movie-api-impl/ios/Podfile +++ b/system-tests/fixtures/api-impl-native/ern-movie-api-impl/ios/Podfile @@ -1,33 +1,57 @@ -require_relative '../node_modules/react-native/scripts/react_native_pods' -require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' +ENV['RCT_NEW_ARCH_ENABLED'] = '0' +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip -platform :ios, '11.0' +platform :ios, '15.1' +prepare_react_native_project! +linkage = ENV['USE_FRAMEWORKS'] +if linkage != nil + Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green + use_frameworks! :linkage => linkage.to_sym +end + target 'ElectrodeApiImpl' do config = use_native_modules! use_react_native!( - :path => "../node_modules/react-native" + :path => config[:reactNativePath], + :fabric_enabled => false, + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}" ) post_install do |installer| - react_native_post_install(installer) - - # Workaround for FBReactNativeSpec dependency cycle issue - # https://github.com/facebook/react-native/issues/31034#issuecomment-812564390 - # https://github.com/electrode-io/electrode-native-manifest/pull/217 + # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + # :ccache_enabled => true + ) + + # https://github.com/facebook/react-native/issues/35863#issuecomment-1414536814 + PLIST_BUDDY_PATH = '/usr/libexec/PlistBuddy' installer.pods_project.targets.each do |target| target.build_configurations.each do |config| - config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES' - end - - if (target.name&.eql?('FBReactNativeSpec')) - target.build_phases.each do |build_phase| - if (build_phase.respond_to?(:name) && build_phase.name.eql?('[CP-User] Generate Specs')) - target.build_phases.move(build_phase, 0) + if target.name == "hermes-engine" + installer.pods_project.files.each do |fileref| + if fileref.path.end_with? "hermes.xcframework" + hermes_plist_file = "#{fileref.real_path}/Info.plist" + # Patch Hermes to remove the debug symbols entry from the Info.plist (as it's not shipped with it) + # This might be removed once Hermes starts to ship with Debug symbols or we remove our + # direct dependency from the Main iOS target on "hermes.xcframework" + Open3.capture3(PLIST_BUDDY_PATH, '-c', 'Delete :AvailableLibraries:0:DebugSymbolsPath', hermes_plist_file) + Open3.capture3(PLIST_BUDDY_PATH, '-c', 'Delete :AvailableLibraries:1:DebugSymbolsPath', hermes_plist_file) + Open3.capture3(PLIST_BUDDY_PATH, '-c', 'Delete :AvailableLibraries:2:DebugSymbolsPath', hermes_plist_file) + end end end end