From abff021261bdb9febb40dbd21eb08eab33ec9cfe Mon Sep 17 00:00:00 2001 From: Kevin Gozali Date: Thu, 24 Sep 2020 15:21:39 -0700 Subject: [PATCH] TurboModule Android: compile codegen C++ output into librntester_appmodules.so Summary: The react-native-codegen provides Android.mk in the Android C++ output, but for RNTester (or hosting apps), we should just compile the codegen output with the rest of the app-specific C++ files. This is to simplify the build configuration, and also to not add too many additional .so libs to the APK. With this commit, `RNTesterAppModuleProvider.cpp` should be "complete" for RNTester use-case. This TurboModule lookup function is the one described in https://github.com/react-native-community/discussions-and-proposals/issues/273. Changelog: [Internal] Reviewed By: hramos Differential Revision: D23913149 fbshipit-source-id: d1ca136787b87a0e8e6504318e1f0a78efef46ea --- packages/rn-tester/android/app/build.gradle | 1 + packages/rn-tester/android/app/src/main/jni/Android.mk | 7 ++++--- .../android/app/src/main/jni/RNTesterAppModuleProvider.cpp | 5 +++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/rn-tester/android/app/build.gradle b/packages/rn-tester/android/app/build.gradle index fca59e9f336..dbf6b8a38b0 100644 --- a/packages/rn-tester/android/app/build.gradle +++ b/packages/rn-tester/android/app/build.gradle @@ -198,6 +198,7 @@ if (enableCodegen) { "NDK_TOOLCHAIN_VERSION=clang", // The following paths assume building React Native from source. // TODO: Find a better way without pointing to ReactAndroid/build dir. + "GENERATED_SRC_DIR=$buildDir/generated/source", "REACT_ANDROID_SRC_DIR=$reactAndroidProjectDir/src/main", "REACT_COMMON_DIR=$rootDir/ReactCommon", "REACT_GENERATED_SRC_DIR=$reactAndroidBuildDir/generated/source", diff --git a/packages/rn-tester/android/app/src/main/jni/Android.mk b/packages/rn-tester/android/app/src/main/jni/Android.mk index c293cb24e8e..36783dc2e52 100644 --- a/packages/rn-tester/android/app/src/main/jni/Android.mk +++ b/packages/rn-tester/android/app/src/main/jni/Android.mk @@ -60,9 +60,10 @@ include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := rntester_appmodules -LOCAL_C_INCLUDES := $(LOCAL_PATH) -LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) -LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) +# Note: Build the react-native-codegen output along with other app-specific C++ files. +LOCAL_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni +LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp) +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni LOCAL_SHARED_LIBRARIES := libreact_nativemodule_core libreact_nativemodule_manager libreact_codegen_reactandroidspec LOCAL_CFLAGS := \ -DLOG_TAG=\"ReactNative\" diff --git a/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.cpp b/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.cpp index 076da3a0f27..d16c9e6dee8 100644 --- a/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.cpp +++ b/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.cpp @@ -7,12 +7,17 @@ #include "RNTesterAppModuleProvider.h" +#include #include namespace facebook { namespace react { std::shared_ptr RNTesterAppModuleProvider(const std::string moduleName, const JavaTurboModule::InitParams ¶ms) { + auto module = PackagesRnTesterAndroidAppSpec_ModuleProvider(moduleName, params); + if (module != nullptr) { + return module; + } return ReactAndroidSpec_ModuleProvider(moduleName, params); }