From 5b86df4f6ae0728ef6a190931277f1a210973cfc Mon Sep 17 00:00:00 2001 From: sj <1025588365@qq.com> Date: Tue, 24 Nov 2020 15:25:19 +0800 Subject: [PATCH 1/4] =?UTF-8?q?flx:=20=E4=BF=AE=E5=A4=8Dyarn=20run=20andro?= =?UTF-8?q?id=E8=B7=91=E4=B8=8D=E8=B5=B7=E6=9D=A5=E6=A8=A1=E6=8B=9F?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/android/app/build.gradle b/template/android/app/build.gradle index e9d42d2d..1215ed78 100755 --- a/template/android/app/build.gradle +++ b/template/android/app/build.gradle @@ -129,7 +129,7 @@ android { } defaultConfig { - applicationId "com.HelloWorld" + applicationId "com.helloworld" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 From 52fcdcba32b10964c2adf18ddf0f387ba434c09f Mon Sep 17 00:00:00 2001 From: sj <1025588365@qq.com> Date: Tue, 24 Nov 2020 16:05:13 +0800 Subject: [PATCH 2/4] =?UTF-8?q?flx=20:=E5=8D=87=E7=BA=A7Pull=20requests?= =?UTF-8?q?=E9=87=8C=E7=9A=84=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/android/gradle.properties | 2 +- template/package.json | 40 +++++++++++++++--------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/template/android/gradle.properties b/template/android/gradle.properties index 04ca0ef2..3bdbd3d4 100644 --- a/template/android/gradle.properties +++ b/template/android/gradle.properties @@ -25,4 +25,4 @@ android.useAndroidX=true android.enableJetifier=true # Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.37.0 +FLIPPER_VERSION=0.54.0 diff --git a/template/package.json b/template/package.json index d5cea839..5816b7ca 100644 --- a/template/package.json +++ b/template/package.json @@ -15,37 +15,37 @@ "dependencies": { "@react-native-community/async-storage": "1.11.0", "@react-native-community/masked-view": "0.1.10", - "@react-navigation/bottom-tabs": "5.8.0", - "@react-navigation/native": "5.7.3", - "@react-navigation/stack": "5.9.0", + "@react-navigation/bottom-tabs": "5.11.2", + "@react-navigation/native": "5.8.10", + "@react-navigation/stack": "5.12.7", "@rematch/core": "1.4.0", "@rematch/loading": "1.2.1", "@uiw/formatter": "1.2.4", "@uiw/react-native": "1.7.4", - "react": "16.13.1", - "react-native": "0.63.2", + "react": "17.0.1", + "react-native": "0.63.3", "react-native-device-info": "5.6.4", "react-native-gesture-handler": "1.7.0", - "react-native-reanimated": "1.13.0", - "react-native-safe-area-context": "3.1.4", - "react-native-screens": "2.10.1", + "react-native-reanimated": "1.13.2", + "react-native-safe-area-context": "3.1.9", + "react-native-screens": "2.15.0", "react-native-svg": "12.1.0", "react-redux": "7.2.1", "redux": "4.0.5" }, "devDependencies": { - "@babel/core": "7.8.4", - "@babel/runtime": "7.8.4", - "@react-native-community/eslint-config": "1.1.0", - "babel-jest": "25.1.0", - "eslint": "6.5.1", - "husky": "4.2.5", - "jest": "25.1.0", - "lint-staged": "10.2.11", - "metro-react-native-babel-preset": "0.59.0", - "mocker-api": "2.6.0", - "prettier": "2.0.5", - "react-test-renderer": "16.13.1" + "@babel/core": "7.12.7", + "@babel/runtime": "7.12.5", + "@react-native-community/eslint-config": "2.0.0", + "babel-jest": "26.6.3", + "eslint": "7.14.0", + "husky": "4.3.0", + "jest": "26.6.3", + "lint-staged": "10.5.1", + "metro-react-native-babel-preset": "0.64.0", + "mocker-api": "2.7.4", + "prettier": "2.2.0", + "react-test-renderer": "17.0.1" }, "husky": { "hooks": { From 49322cc83884e529ee5ccc1a527ac8740097122b Mon Sep 17 00:00:00 2001 From: sj <1025588365@qq.com> Date: Tue, 24 Nov 2020 19:13:59 +0800 Subject: [PATCH 3/4] =?UTF-8?q?flx=20:=20=E5=8E=BB=E6=8E=89=E4=B8=8D?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=8D=87=E7=BA=A7=E7=9A=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?,=E5=92=8C=E5=8D=87=E7=BA=A7=E5=AE=98=E6=96=B9=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E7=9A=84=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/template/package.json b/template/package.json index 5816b7ca..14af97bf 100644 --- a/template/package.json +++ b/template/package.json @@ -13,19 +13,19 @@ "lint": "eslint . --ext .js,.jsx,.ts,.tsx" }, "dependencies": { - "@react-native-community/async-storage": "1.11.0", + "@react-native-community/async-storage": "1.12.1", "@react-native-community/masked-view": "0.1.10", "@react-navigation/bottom-tabs": "5.11.2", "@react-navigation/native": "5.8.10", - "@react-navigation/stack": "5.12.7", + "@react-navigation/stack": "5.12.8", "@rematch/core": "1.4.0", "@rematch/loading": "1.2.1", "@uiw/formatter": "1.2.4", "@uiw/react-native": "1.7.4", - "react": "17.0.1", + "react": "16.13.1", "react-native": "0.63.3", - "react-native-device-info": "5.6.4", - "react-native-gesture-handler": "1.7.0", + "react-native-device-info": "7.1.0", + "react-native-gesture-handler": "1.9.0", "react-native-reanimated": "1.13.2", "react-native-safe-area-context": "3.1.9", "react-native-screens": "2.15.0", @@ -45,7 +45,7 @@ "metro-react-native-babel-preset": "0.64.0", "mocker-api": "2.7.4", "prettier": "2.2.0", - "react-test-renderer": "17.0.1" + "react-test-renderer": "16.13.1" }, "husky": { "hooks": { From c8f83356a6526dad8236949cd5781c34de174c8f Mon Sep 17 00:00:00 2001 From: sj Date: Sat, 30 Jul 2022 17:50:52 +0800 Subject: [PATCH 4/4] =?UTF-8?q?chore(deps)=EF=BC=9A0.66.1=20=E5=88=B0=200.?= =?UTF-8?q?69.1=20=E7=9A=84=20android=20=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/template/android/app/build.gradle | 117 ++++++++++++++++-- .../ReactNativeFlipper.java | 7 +- .../MainActivity.java | 2 +- .../MainApplication.java | 0 .../MainApplicationReactNativeHost.java | 0 .../components/MainComponentsRegistry.java | 0 ...ApplicationTurboModuleManagerDelegate.java | 0 7 files changed, 112 insertions(+), 14 deletions(-) rename template/template/android/app/src/debug/java/com/{helloworld => awesomeproject}/ReactNativeFlipper.java (99%) rename template/template/android/app/src/main/java/com/{helloworld => awesomeproject}/MainActivity.java (98%) rename template/template/android/app/src/main/java/com/{helloworld => awesomeproject}/MainApplication.java (100%) rename template/template/android/app/src/main/java/com/{helloworld => awesomeproject}/newarchitecture/MainApplicationReactNativeHost.java (100%) rename template/template/android/app/src/main/java/com/{helloworld => awesomeproject}/newarchitecture/components/MainComponentsRegistry.java (100%) rename template/template/android/app/src/main/java/com/{helloworld => awesomeproject}/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java (100%) diff --git a/template/template/android/app/build.gradle b/template/template/android/app/build.gradle index 4e64e6a0..3081a1f2 100644 --- a/template/template/android/app/build.gradle +++ b/template/template/android/app/build.gradle @@ -114,16 +114,19 @@ def jscFlavor = 'org.webkit:android-jsc:+' /** * Whether to enable the Hermes VM. * - * This should be set on project.ext.react and mirrored here. If it is not set + * This should be set on project.ext.react and that value will be read here. If it is not set * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode * and the benefits of using Hermes will therefore be sharply reduced. */ def enableHermes = project.ext.react.get("enableHermes", false); /** - * Architectures to build native code for in debug. + * Architectures to build native code for. */ -def nativeArchitectures = project.getProperties().get("reactNativeDebugArchitectures") +def reactNativeArchitectures() { + def value = project.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} android { ndkVersion rootProject.ext.ndkVersion @@ -136,13 +139,82 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + + if (isNewArchitectureEnabled()) { + // We configure the NDK build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + ndkBuild { + arguments "APP_PLATFORM=android-21", + "APP_STL=c++_shared", + "NDK_TOOLCHAIN_VERSION=clang", + "GENERATED_SRC_DIR=$buildDir/generated/source", + "PROJECT_BUILD_DIR=$buildDir", + "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", + "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build", + "NODE_MODULES_DIR=$rootDir/../node_modules" + cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" + cppFlags "-std=c++17" + // Make sure this target name is the same you specify inside the + // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. + targets "helloworld_appmodules" + } + } + if (!enableSeparateBuildPerCPUArchitecture) { + ndk { + abiFilters (*reactNativeArchitectures()) + } + } + } } + + if (isNewArchitectureEnabled()) { + // We configure the NDK build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + ndkBuild { + path "$projectDir/src/main/jni/Android.mk" + } + } + def reactAndroidProjectDir = project(':ReactAndroid').projectDir + def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + afterEvaluate { + // If you wish to add a custom TurboModule or component locally, + // you should uncomment this line. + // preBuild.dependsOn("generateCodegenArtifactsFromSchema") + preDebugBuild.dependsOn(packageReactNdkDebugLibs) + preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) + + // Due to a bug inside AGP, we have to explicitly set a dependency + // between configureNdkBuild* tasks and the preBuild tasks. + // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732 + configureNdkBuildRelease.dependsOn(preReleaseBuild) + configureNdkBuildDebug.dependsOn(preDebugBuild) + reactNativeArchitectures().each { architecture -> + tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure { + dependsOn("preDebugBuild") + } + tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure { + dependsOn("preReleaseBuild") + } + } + } + } + splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + include (*reactNativeArchitectures()) } } signingConfigs { @@ -156,11 +228,6 @@ android { buildTypes { debug { signingConfig signingConfigs.debug - if (nativeArchitectures) { - ndk { - abiFilters nativeArchitectures.split(',') - } - } } release { // Caution! In production, you need to generate your own keystore file. @@ -190,6 +257,7 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) + //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" // From node_modules @@ -209,14 +277,31 @@ dependencies { } if (enableHermes) { - def hermesPath = "../../node_modules/hermes-engine/android/"; - debugImplementation files(hermesPath + "hermes-debug.aar") - releaseImplementation files(hermesPath + "hermes-release.aar") + //noinspection GradleDynamicVersion + implementation("com.facebook.react:hermes-engine:+") { // From node_modules + exclude group:'com.facebook.fbjni' + } } else { implementation jscFlavor } } +if (isNewArchitectureEnabled()) { + // If new architecture is enabled, we let you build RN from source + // Otherwise we fallback to a prebuilt .aar bundled in the NPM package. + // This will be applied to all the imported transtitive dependency. + configurations.all { + resolutionStrategy.dependencySubstitution { + substitute(module("com.facebook.react:react-native")) + .using(project(":ReactAndroid")) + .because("On New Architecture we're building React Native from source") + substitute(module("com.facebook.react:hermes-engine")) + .using(project(":ReactAndroid:hermes-engine")) + .because("On New Architecture we're building Hermes from source") + } + } +} + // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { @@ -225,3 +310,11 @@ task copyDownloadableDepsToLibs(type: Copy) { } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) + +def isNewArchitectureEnabled() { + // To opt-in for the New Architecture, you can either: + // - Set `newArchEnabled` to true inside the `gradle.properties` file + // - Invoke gradle with `-newArchEnabled=true` + // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} diff --git a/template/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java b/template/template/android/app/src/debug/java/com/awesomeproject/ReactNativeFlipper.java similarity index 99% rename from template/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java rename to template/template/android/app/src/debug/java/com/awesomeproject/ReactNativeFlipper.java index 8f18993f..8ed784fe 100644 --- a/template/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +++ b/template/template/android/app/src/debug/java/com/awesomeproject/ReactNativeFlipper.java @@ -5,6 +5,7 @@ * directory of this source tree. */ package com.helloworld; + import android.content.Context; import com.facebook.flipper.android.AndroidFlipperClient; import com.facebook.flipper.android.utils.FlipperUtils; @@ -23,15 +24,18 @@ import com.facebook.react.bridge.ReactContext; import com.facebook.react.modules.network.NetworkingModule; import okhttp3.OkHttpClient; + public class ReactNativeFlipper { public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { if (FlipperUtils.shouldEnableFlipper(context)) { final FlipperClient client = AndroidFlipperClient.getInstance(context); + client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); client.addPlugin(new ReactFlipperPlugin()); client.addPlugin(new DatabasesFlipperPlugin(context)); client.addPlugin(new SharedPreferencesFlipperPlugin(context)); client.addPlugin(CrashReporterPlugin.getInstance()); + NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); NetworkingModule.setCustomClientBuilder( new NetworkingModule.CustomClientBuilder() { @@ -42,6 +46,7 @@ public void apply(OkHttpClient.Builder builder) { }); client.addPlugin(networkFlipperPlugin); client.start(); + // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized // Hence we run if after all native modules have been initialized ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); @@ -65,4 +70,4 @@ public void run() { } } } -} \ No newline at end of file +} diff --git a/template/template/android/app/src/main/java/com/helloworld/MainActivity.java b/template/template/android/app/src/main/java/com/awesomeproject/MainActivity.java similarity index 98% rename from template/template/android/app/src/main/java/com/helloworld/MainActivity.java rename to template/template/android/app/src/main/java/com/awesomeproject/MainActivity.java index 405d80a8..4a9fae76 100644 --- a/template/template/android/app/src/main/java/com/helloworld/MainActivity.java +++ b/template/template/android/app/src/main/java/com/awesomeproject/MainActivity.java @@ -12,7 +12,7 @@ public class MainActivity extends ReactActivity { */ @Override protected String getMainComponentName() { - return "HelloWorld"; + return "helloworld"; } /** diff --git a/template/template/android/app/src/main/java/com/helloworld/MainApplication.java b/template/template/android/app/src/main/java/com/awesomeproject/MainApplication.java similarity index 100% rename from template/template/android/app/src/main/java/com/helloworld/MainApplication.java rename to template/template/android/app/src/main/java/com/awesomeproject/MainApplication.java diff --git a/template/template/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java b/template/template/android/app/src/main/java/com/awesomeproject/newarchitecture/MainApplicationReactNativeHost.java similarity index 100% rename from template/template/android/app/src/main/java/com/helloworld/newarchitecture/MainApplicationReactNativeHost.java rename to template/template/android/app/src/main/java/com/awesomeproject/newarchitecture/MainApplicationReactNativeHost.java diff --git a/template/template/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java b/template/template/android/app/src/main/java/com/awesomeproject/newarchitecture/components/MainComponentsRegistry.java similarity index 100% rename from template/template/android/app/src/main/java/com/helloworld/newarchitecture/components/MainComponentsRegistry.java rename to template/template/android/app/src/main/java/com/awesomeproject/newarchitecture/components/MainComponentsRegistry.java diff --git a/template/template/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/template/template/android/app/src/main/java/com/awesomeproject/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java similarity index 100% rename from template/template/android/app/src/main/java/com/helloworld/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java rename to template/template/android/app/src/main/java/com/awesomeproject/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java