diff --git a/ReactAndroid/Android-prebuilt.mk b/ReactAndroid/Android-prebuilt.mk index 98c685a22c464e..48dd794a479922 100644 --- a/ReactAndroid/Android-prebuilt.mk +++ b/ReactAndroid/Android-prebuilt.mk @@ -175,6 +175,14 @@ LOCAL_EXPORT_C_INCLUDES := \ $(REACT_COMMON_DIR)/react/renderer/componentregistry include $(PREBUILT_SHARED_LIBRARY) +# react_newarchdefaults +include $(CLEAR_VARS) +LOCAL_MODULE := react_newarchdefaults +LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_newarchdefaults.so +LOCAL_EXPORT_C_INCLUDES := \ + $(REACT_ANDROID_SRC_DIR)/jni/react/newarchdefaults +include $(PREBUILT_SHARED_LIBRARY) + # jsi include $(CLEAR_VARS) LOCAL_MODULE := jsi diff --git a/ReactAndroid/build.gradle b/ReactAndroid/build.gradle index 9d4151489a6af5..d7fba23fca259e 100644 --- a/ReactAndroid/build.gradle +++ b/ReactAndroid/build.gradle @@ -298,6 +298,7 @@ android { "jsijniprofiler", "reactnativeblob", "reactperfloggerjni", + "react_newarchdefaults", "turbomodulejsijni", "fabricjni" } diff --git a/ReactAndroid/cmake-utils/Android-prebuilt.cmake b/ReactAndroid/cmake-utils/Android-prebuilt.cmake index eb145f4550cfb2..4ac0a3b368b24a 100644 --- a/ReactAndroid/cmake-utils/Android-prebuilt.cmake +++ b/ReactAndroid/cmake-utils/Android-prebuilt.cmake @@ -203,6 +203,14 @@ set_target_properties(react_render_componentregistry ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_componentregistry.so) target_include_directories(react_render_componentregistry INTERFACE ${REACT_COMMON_DIR}/react/renderer/componentregistry) +## react_newarchdefaults +add_library(react_newarchdefaults SHARED IMPORTED GLOBAL) +set_target_properties(react_newarchdefaults + PROPERTIES + IMPORTED_LOCATION + ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_newarchdefaults.so) +target_include_directories(react_newarchdefaults INTERFACE ${REACT_ANDROID_SRC_DIR}/jni/react/newarchdefaults) + ## jsi add_library(jsi SHARED IMPORTED GLOBAL) set_target_properties(jsi diff --git a/ReactAndroid/cmake-utils/ReactNative-application.cmake b/ReactAndroid/cmake-utils/ReactNative-application.cmake index a002d664389f93..2471db032a8031 100644 --- a/ReactAndroid/cmake-utils/ReactNative-application.cmake +++ b/ReactAndroid/cmake-utils/ReactNative-application.cmake @@ -40,6 +40,7 @@ target_link_libraries(${CMAKE_PROJECT_NAME} react_codegen_rncore react_debug react_nativemodule_core + react_newarchdefaults react_render_componentregistry react_render_core react_render_debug diff --git a/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultComponentsRegistry.kt b/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultComponentsRegistry.kt index 23e65c2d4a9c71..cd0f46e359c5df 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultComponentsRegistry.kt +++ b/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultComponentsRegistry.kt @@ -15,9 +15,8 @@ import com.facebook.react.fabric.ComponentFactory * A utility class that provides users a ComponentRegistry they can customize with a C++ * implementation of its native methods. * - * Please note that you need to provide a native implementation for the method initHybrid for this - * class, making sure the Java Descriptor is: - * Lcom/facebook/react/defaults/DefaultComponentsRegistry; + * This class works together with the [DefaultNativeEntryPoint] and it's C++ implementation is + * hosted inside the React Native framwork */ @DoNotStrip class DefaultComponentsRegistry diff --git a/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNativeEntryPoint.kt b/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNativeEntryPoint.kt new file mode 100644 index 00000000000000..e5acf77e88dd07 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNativeEntryPoint.kt @@ -0,0 +1,39 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.defaults + +import com.facebook.jni.HybridData +import com.facebook.proguard.annotations.DoNotStrip +import com.facebook.soloader.SoLoader + +/** + * A utility class that serves as an entry point for users to register all the custom Fabric + * Components and Turbo Native Modules. + * + * This class needs to be invoked as `DefaultNativeEntryPoint.load("...")` by passing the name of + * the dynamic library to load. + * + * This class works together with the [DefaultNativeEntryPoint] and it's C++ implementation is + * hosted inside the React Native framework + */ +@DoNotStrip +class DefaultNativeEntryPoint @DoNotStrip private constructor() { + + @DoNotStrip private val hybridData: HybridData = initHybrid() + + @DoNotStrip private external fun initHybrid(): HybridData + + companion object { + @JvmStatic + fun load(dynamicLibraryName: String) { + SoLoader.loadLibrary("react_newarchdefaults") + SoLoader.loadLibrary(dynamicLibraryName) + DefaultNativeEntryPoint() + } + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt b/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt index 5217230f12a8c6..b3cd8223920f24 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt +++ b/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt @@ -17,9 +17,8 @@ import com.facebook.react.bridge.ReactApplicationContext * A utility class that allows you to simplify the setup of a * [ReactPackageTurboModuleManagerDelegate] for new apps in Open Source. * - * Please note that you need to provide a native implementation for the method initHybrid for this - * class, making sure the Java Descriptor is: - * Lcom/facebook/react/defaults/DefaultTurboModuleManagerDelegate; + * This class works together with the [DefaultNativeEntryPoint] and it's C++ implementation is + * hosted inside the React Native framwork */ class DefaultTurboModuleManagerDelegate private constructor(context: ReactApplicationContext, packages: List) : diff --git a/ReactAndroid/src/main/jni/CMakeLists.txt b/ReactAndroid/src/main/jni/CMakeLists.txt index 6b8945cf78063b..3f47b8905e689c 100644 --- a/ReactAndroid/src/main/jni/CMakeLists.txt +++ b/ReactAndroid/src/main/jni/CMakeLists.txt @@ -101,6 +101,7 @@ add_react_android_subdir(src/main/jni/react/uimanager) add_react_android_subdir(src/main/jni/react/mapbuffer) add_react_android_subdir(src/main/jni/react/reactnativeblob) add_react_android_subdir(src/main/jni/react/fabric) +add_react_android_subdir(src/main/jni/react/newarchdefaults) add_react_android_subdir(src/main/jni/react/hermes/reactexecutor) add_react_android_subdir(src/main/jni/react/hermes/instrumentation/) diff --git a/ReactAndroid/src/main/jni/react/newarchdefaults/CMakeLists.txt b/ReactAndroid/src/main/jni/react/newarchdefaults/CMakeLists.txt new file mode 100644 index 00000000000000..fefaedfa3b0521 --- /dev/null +++ b/ReactAndroid/src/main/jni/react/newarchdefaults/CMakeLists.txt @@ -0,0 +1,22 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + +cmake_minimum_required(VERSION 3.13) +set(CMAKE_VERBOSE_MAKEFILE on) + +add_compile_options(-fexceptions -frtti -std=c++17 -Wall -DLOG_TAG=\"ReactNative\") + +file(GLOB react_newarchdefaults_SRC CONFIGURE_DEPENDS *.cpp) + +add_library(react_newarchdefaults SHARED ${react_newarchdefaults_SRC}) + +target_include_directories(react_newarchdefaults PUBLIC .) + +target_link_libraries(react_newarchdefaults + fbjni + fabricjni + react_nativemodule_core + react_codegen_rncore + jsi) diff --git a/packages/rn-tester/android/app/src/main/jni/RNTesterComponentsRegistry.cpp b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.cpp similarity index 68% rename from packages/rn-tester/android/app/src/main/jni/RNTesterComponentsRegistry.cpp rename to ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.cpp index ad8370b19e2311..00e2cfc15ec515 100644 --- a/packages/rn-tester/android/app/src/main/jni/RNTesterComponentsRegistry.cpp +++ b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.cpp @@ -5,33 +5,34 @@ * LICENSE file in the root directory of this source tree. */ -#include "RNTesterComponentsRegistry.h" +#include "DefaultComponentsRegistry.h" #include #include #include -#include #include namespace facebook { namespace react { -RNTesterComponentsRegistry::RNTesterComponentsRegistry( - ComponentFactory *delegate) +std::function)> + DefaultComponentsRegistry::registerComponentDescriptorsFromEntryPoint{}; + +DefaultComponentsRegistry::DefaultComponentsRegistry(ComponentFactory *delegate) : delegate_(delegate) {} std::shared_ptr -RNTesterComponentsRegistry::sharedProviderRegistry() { +DefaultComponentsRegistry::sharedProviderRegistry() { auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry(); - providerRegistry->add(concreteComponentDescriptorProvider< - RNTMyNativeViewComponentDescriptor>()); + (DefaultComponentsRegistry::registerComponentDescriptorsFromEntryPoint)( + providerRegistry); return providerRegistry; } -jni::local_ref -RNTesterComponentsRegistry::initHybrid( +jni::local_ref +DefaultComponentsRegistry::initHybrid( jni::alias_ref, ComponentFactory *delegate) { auto instance = makeCxxInstance(delegate); @@ -40,7 +41,7 @@ RNTesterComponentsRegistry::initHybrid( [](EventDispatcher::Weak const &eventDispatcher, ContextContainer::Shared const &contextContainer) -> ComponentDescriptorRegistry::Shared { - auto registry = RNTesterComponentsRegistry::sharedProviderRegistry() + auto registry = DefaultComponentsRegistry::sharedProviderRegistry() ->createComponentDescriptorRegistry( {eventDispatcher, contextContainer}); @@ -59,9 +60,9 @@ RNTesterComponentsRegistry::initHybrid( return instance; } -void RNTesterComponentsRegistry::registerNatives() { +void DefaultComponentsRegistry::registerNatives() { registerHybrid({ - makeNativeMethod("initHybrid", RNTesterComponentsRegistry::initHybrid), + makeNativeMethod("initHybrid", DefaultComponentsRegistry::initHybrid), }); } diff --git a/packages/rn-tester/android/app/src/main/jni/RNTesterComponentsRegistry.h b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.h similarity index 71% rename from packages/rn-tester/android/app/src/main/jni/RNTesterComponentsRegistry.h rename to ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.h index 5069583c7c20b0..fd2a711349000d 100644 --- a/packages/rn-tester/android/app/src/main/jni/RNTesterComponentsRegistry.h +++ b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.h @@ -11,19 +11,24 @@ #include #include #include +#include namespace facebook { namespace react { -class RNTesterComponentsRegistry - : public facebook::jni::HybridClass { +class DefaultComponentsRegistry + : public facebook::jni::HybridClass { public: constexpr static auto kJavaDescriptor = "Lcom/facebook/react/defaults/DefaultComponentsRegistry;"; static void registerNatives(); - RNTesterComponentsRegistry(ComponentFactory *delegate); + static std::function)> + registerComponentDescriptorsFromEntryPoint; + + DefaultComponentsRegistry(ComponentFactory *delegate); private: friend HybridBase; diff --git a/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp new file mode 100644 index 00000000000000..09534d8ce08aca --- /dev/null +++ b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "DefaultTurboModuleManagerDelegate.h" + +#include + +namespace facebook { +namespace react { + +std::function( + const std::string &, + const JavaTurboModule::InitParams &)> + DefaultTurboModuleManagerDelegate::moduleProvidersFromEntryPoint{nullptr}; + +jni::local_ref +DefaultTurboModuleManagerDelegate::initHybrid(jni::alias_ref) { + return makeCxxInstance(); +} + +void DefaultTurboModuleManagerDelegate::registerNatives() { + registerHybrid({ + makeNativeMethod( + "initHybrid", DefaultTurboModuleManagerDelegate::initHybrid), + }); +} + +std::shared_ptr DefaultTurboModuleManagerDelegate::getTurboModule( + const std::string &name, + const std::shared_ptr &jsInvoker) { + // Not implemented yet: provide pure-C++ NativeModules here. + return nullptr; +} + +std::shared_ptr DefaultTurboModuleManagerDelegate::getTurboModule( + const std::string &name, + const JavaTurboModule::InitParams ¶ms) { + auto resolvedModule = (DefaultTurboModuleManagerDelegate:: + moduleProvidersFromEntryPoint)(name, params); + if (resolvedModule != nullptr) { + return resolvedModule; + } + return rncore_ModuleProvider(name, params); +} + +} // namespace react +} // namespace facebook diff --git a/packages/rn-tester/android/app/src/main/jni/RNTesterTurboModuleManagerDelegate.h b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.h similarity index 67% rename from packages/rn-tester/android/app/src/main/jni/RNTesterTurboModuleManagerDelegate.h rename to ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.h index d7330c252d1d26..1a9c75b1d9c1cc 100644 --- a/packages/rn-tester/android/app/src/main/jni/RNTesterTurboModuleManagerDelegate.h +++ b/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.h @@ -8,16 +8,17 @@ #include #include +#include +#include #include #include namespace facebook { namespace react { -class RNTesterTurboModuleManagerDelegate - : public jni::HybridClass< - RNTesterTurboModuleManagerDelegate, - TurboModuleManagerDelegate> { +class DefaultTurboModuleManagerDelegate : public jni::HybridClass< + DefaultTurboModuleManagerDelegate, + TurboModuleManagerDelegate> { public: static constexpr auto kJavaDescriptor = "Lcom/facebook/react/defaults/DefaultTurboModuleManagerDelegate;"; @@ -26,6 +27,11 @@ class RNTesterTurboModuleManagerDelegate static void registerNatives(); + static std::function( + const std::string &, + const JavaTurboModule::InitParams &)> + moduleProvidersFromEntryPoint; + std::shared_ptr getTurboModule( const std::string &name, const std::shared_ptr &jsInvoker) override; diff --git a/ReactAndroid/src/main/jni/react/newarchdefaults/OnLoad.cpp b/ReactAndroid/src/main/jni/react/newarchdefaults/OnLoad.cpp new file mode 100644 index 00000000000000..f93ba96e8653f6 --- /dev/null +++ b/ReactAndroid/src/main/jni/react/newarchdefaults/OnLoad.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include + +#include "DefaultComponentsRegistry.h" +#include "DefaultTurboModuleManagerDelegate.h" + +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { + return facebook::jni::initialize(vm, [] { + facebook::react::DefaultTurboModuleManagerDelegate::registerNatives(); + facebook::react::DefaultComponentsRegistry::registerNatives(); + }); +} diff --git a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java index ca0d5ddbd96007..589cb4df56c82d 100644 --- a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java +++ b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java @@ -17,6 +17,7 @@ import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.config.ReactFeatureFlags; +import com.facebook.react.defaults.DefaultNativeEntryPoint; import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.react.module.model.ReactModuleInfo; import com.facebook.react.module.model.ReactModuleInfoProvider; @@ -122,7 +123,7 @@ public void onCreate() { ReactFontManager.getInstance().addCustomFont(this, "Rubik", R.font.rubik); super.onCreate(); SoLoader.init(this, /* native exopackage */ false); - SoLoader.loadLibrary(BuildConfig.DYNAMIC_LIBRARY_NAME); + DefaultNativeEntryPoint.load(BuildConfig.DYNAMIC_LIBRARY_NAME); ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); } diff --git a/packages/rn-tester/android/app/src/main/jni/OnLoad.cpp b/packages/rn-tester/android/app/src/main/jni/OnLoad.cpp index 8e5b8a6fba0864..73b838cffbaf0b 100644 --- a/packages/rn-tester/android/app/src/main/jni/OnLoad.cpp +++ b/packages/rn-tester/android/app/src/main/jni/OnLoad.cpp @@ -5,16 +5,67 @@ * LICENSE file in the root directory of this source tree. */ +#include +#include +#include +#include #include +#include +#include +#include -#include "RNTesterComponentsRegistry.h" -#include "RNTesterTurboModuleManagerDelegate.h" +namespace facebook { +namespace react { + +void registerComponents( + std::shared_ptr registry) { + registry->add(concreteComponentDescriptorProvider< + RNTMyNativeViewComponentDescriptor>()); +} + +std::shared_ptr provideModules( + const std::string &name, + const JavaTurboModule::InitParams ¶ms) { + auto module = AppSpecs_ModuleProvider(name, params); + if (module != nullptr) { + return module; + } + module = SampleTurboModuleSpec_ModuleProvider(name, params); + if (module != nullptr) { + return module; + }; + return rncore_ModuleProvider(name, params); +} + +class RNTesterNativeEntryPoint + : public facebook::jni::HybridClass { + public: + constexpr static auto kJavaDescriptor = + "Lcom/facebook/react/defaults/DefaultNativeEntryPoint;"; + + static jni::local_ref initHybrid(jni::alias_ref) { + DefaultTurboModuleManagerDelegate::moduleProvidersFromEntryPoint = + &provideModules; + DefaultComponentsRegistry::registerComponentDescriptorsFromEntryPoint = + ®isterComponents; + return makeCxxInstance(); + } + + static void registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", RNTesterNativeEntryPoint::initHybrid), + }); + } + + private: + friend HybridBase; + using HybridBase::HybridBase; +}; + +} // namespace react +} // namespace facebook JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { - return facebook::jni::initialize(vm, [] { - // TODO: dvacca ramanpreet unify this with the way - // "ComponentDescriptorFactory" is defined in Fabric - facebook::react::RNTesterTurboModuleManagerDelegate::registerNatives(); - facebook::react::RNTesterComponentsRegistry::registerNatives(); - }); + return facebook::jni::initialize( + vm, [] { facebook::react::RNTesterNativeEntryPoint::registerNatives(); }); } diff --git a/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.cpp b/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.cpp deleted file mode 100644 index 5b55ce4a9de9bd..00000000000000 --- a/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include "RNTesterAppModuleProvider.h" - -#include -#include -#include - -namespace facebook { -namespace react { - -std::shared_ptr RNTesterAppModuleProvider( - const std::string &moduleName, - const JavaTurboModule::InitParams ¶ms) { - auto module = AppSpecs_ModuleProvider(moduleName, params); - if (module != nullptr) { - return module; - } - - module = SampleTurboModuleSpec_ModuleProvider(moduleName, params); - if (module != nullptr) { - return module; - } - - return rncore_ModuleProvider(moduleName, params); -} - -} // namespace react -} // namespace facebook diff --git a/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.h b/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.h deleted file mode 100644 index 033031c495bdba..00000000000000 --- a/packages/rn-tester/android/app/src/main/jni/RNTesterAppModuleProvider.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -#include -#include - -#include - -namespace facebook { -namespace react { - -std::shared_ptr RNTesterAppModuleProvider( - const std::string &moduleName, - const JavaTurboModule::InitParams ¶ms); - -} // namespace react -} // namespace facebook diff --git a/packages/rn-tester/android/app/src/main/jni/RNTesterTurboModuleManagerDelegate.cpp b/packages/rn-tester/android/app/src/main/jni/RNTesterTurboModuleManagerDelegate.cpp deleted file mode 100644 index c12c1cbdb4332d..00000000000000 --- a/packages/rn-tester/android/app/src/main/jni/RNTesterTurboModuleManagerDelegate.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include "RNTesterTurboModuleManagerDelegate.h" - -#include "RNTesterAppModuleProvider.h" - -namespace facebook { -namespace react { - -jni::local_ref -RNTesterTurboModuleManagerDelegate::initHybrid(jni::alias_ref) { - return makeCxxInstance(); -} - -void RNTesterTurboModuleManagerDelegate::registerNatives() { - registerHybrid({ - makeNativeMethod( - "initHybrid", RNTesterTurboModuleManagerDelegate::initHybrid), - }); -} - -std::shared_ptr RNTesterTurboModuleManagerDelegate::getTurboModule( - const std::string &name, - const std::shared_ptr &jsInvoker) { - // Not implemented yet: provide pure-C++ NativeModules here. - return nullptr; -} - -std::shared_ptr RNTesterTurboModuleManagerDelegate::getTurboModule( - const std::string &name, - const JavaTurboModule::InitParams ¶ms) { - return RNTesterAppModuleProvider(name, params); -} - -} // namespace react -} // namespace facebook