diff --git a/ReactAndroid/Android-prebuilt.mk b/ReactAndroid/Android-prebuilt.mk index 4a4fb45ee1f..394032a524a 100644 --- a/ReactAndroid/Android-prebuilt.mk +++ b/ReactAndroid/Android-prebuilt.mk @@ -24,7 +24,7 @@ REACT_ANDROID_SRC_DIR := $(REACT_ANDROID_DIR)/src/main REACT_COMMON_DIR := $(REACT_ANDROID_DIR)/../ReactCommon REACT_GENERATED_SRC_DIR := $(REACT_ANDROID_BUILD_DIR)/generated/source # Note: this only have .so, not .a -REACT_NDK_EXPORT_DIR := $(REACT_ANDROID_BUILD_DIR)/react-ndk/exported +REACT_NDK_EXPORT_DIR := $(PROJECT_BUILD_DIR)/react-ndk/exported # fb include $(CLEAR_VARS) diff --git a/packages/rn-tester/android/app/build.gradle b/packages/rn-tester/android/app/build.gradle index 2e70e9014a3..fe95b03be0c 100644 --- a/packages/rn-tester/android/app/build.gradle +++ b/packages/rn-tester/android/app/build.gradle @@ -186,33 +186,6 @@ android { } } -if (enableCodegen) { - def reactAndroidProjectDir = project(':ReactAndroid').projectDir; - android { - defaultConfig { - externalNativeBuild { - ndkBuild { - abiFilters "armeabi-v7a", "x86", "x86_64", "arm64-v8a" - arguments "APP_PLATFORM=android-16", - "APP_STL=c++_shared", - "NDK_TOOLCHAIN_VERSION=clang", - // The following paths assume building React Native from source. - "GENERATED_SRC_DIR=$buildDir/generated/source", - "REACT_ANDROID_DIR=$reactAndroidProjectDir" - cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" - cppFlags "-std=c++1y" - targets "rntester_appmodules" - } - } - } - externalNativeBuild { - ndkBuild { - path "$projectDir/src/main/jni/Android.mk" - } - } - } -} - configurations { hermesDebugImplementation {} hermesReleaseImplementation {} @@ -258,3 +231,59 @@ react { reactNativeRootDir = file("$rootDir") useJavaGenerator = System.getenv("USE_CODEGEN_JAVAPOET") ?: false } + +if (enableCodegen) { + // TODO: Move all this logic to CodegenPlugin.java. + def reactAndroidProjectDir = project(':ReactAndroid').projectDir; + def reactAndroidBuildDir = project(':ReactAndroid').buildDir; + + android { + defaultConfig { + externalNativeBuild { + ndkBuild { + abiFilters "armeabi-v7a", "x86", "x86_64", "arm64-v8a" + arguments "APP_PLATFORM=android-16", + "APP_STL=c++_shared", + "NDK_TOOLCHAIN_VERSION=clang", + // The following paths assume building React Native from source. + "GENERATED_SRC_DIR=$buildDir/generated/source", + "PROJECT_BUILD_DIR=$buildDir", + "REACT_ANDROID_DIR=$reactAndroidProjectDir" + cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" + cppFlags "-std=c++1y" + targets "rntester_appmodules" + } + } + } + externalNativeBuild { + ndkBuild { + path "$projectDir/src/main/jni/Android.mk" + } + } + } + + def packageReactNdkLibs = tasks.register("packageReactNdkLibs", Copy) { + // TODO: handle extracting .so from prebuilt :ReactAndroid. + dependsOn(":ReactAndroid:packageReactNdkLibs") + from("$reactAndroidBuildDir/react-ndk/exported") + into("$buildDir/react-ndk/exported") + } + + def cleanProjectNdkBuild = tasks.register("cleanProjectNdkBuild", Exec) { + ignoreExitValue(true) + tasks.forEach { + t -> + if (t.name.startsWith("externalNativeBuildClean")) { + dependsOn(t); + } + } + // This .cxx folder may cause stale ndkBuild configuration. + // See https://stackoverflow.com/a/58288851. + commandLine("rm", "-rf", "$projectDir/.cxx") + } + + afterEvaluate { + preBuild.dependsOn(packageReactNdkLibs) + clean.dependsOn(cleanProjectNdkBuild) + } +}