mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Introduce ReactPackageTurboModuleManagerDelegate
Summary: ## Summary People use `ReactPackage` instances to create NativeModules. To make the migration from NativeModule to TurboModule easy, I'm introducing a `TurboModuleManagerDelegate` that understands `ReactPackage`s, and uses them to lookup and create the Java TurboModule objects. This way, we don't have to change the way we declare NativeModules for the migration. ## TurboModule registration Each application should have its own subclass of `ReactPackageTurboModuleManagerDelegate`. This subclass is a hybrid class with a C++ and a Java part. The Java part can (and probably should) do nothing (for now). The C++ part has to implement the `moduleName -> jni::HostObject` and `moduleName, javaInstance -> jni::HostObject` functions for all TurboModules in the application. **Use Case: Migrating a NativeModule to TurboModule system** 1. Make the Java NativeModule extend `TurboModule`. (The reason why this doesn't happen automatically is probably because we haven't changed the Java codegen yet). 2. Modify the `moduleName -> jni::HostObject` or `moduleName, javaInstance -> jni::HostObject` functions to return the `TurboModule`. **Use Case: Adding a new TurboModule** 1. Add the TurboModule to a `ReactPackage` in the application. 2. Modify the `moduleName -> jni::HostObject` or `moduleName, javaInstance -> jni::HostObject` functions to return the TurboModule `jsi::HostObject`. **Note:** It's also possible to declare TurboModules by overriding the `getModule(String moduleName)` function of `ReactPackageTurboModuleManagerDelegate`. It's not a good idea, because it'll make switching between the NativeModule/TurboModule system difficult. Reviewed By: mdvacca Differential Revision: D15209129 fbshipit-source-id: 4b0a303595145be9b19d6f4934f956b91990f859
This commit is contained in:
committed by
Facebook Github Bot
parent
12c0ec85f7
commit
08d87cdacc
@@ -307,6 +307,10 @@ public class ReactInstanceManager {
|
||||
return mMemoryPressureRouter;
|
||||
}
|
||||
|
||||
public List<ReactPackage> getPackages() {
|
||||
return new ArrayList<>(mPackages);
|
||||
}
|
||||
|
||||
private static void initializeSoLoaderIfNecessary(Context applicationContext) {
|
||||
// Call SoLoader.initialize here, this is required for apps that does not use exopackage and
|
||||
// does not use SoLoader for loading other native code except from the one used by React Native
|
||||
|
||||
Reference in New Issue
Block a user