public class CustomTurboPackage extends TurboReactPackage { @Override public NativeModule getModule(String name, ReactApplicationContext reactContext) { // name should be same as how it gets called from JS side switch (name) { case "CustomBackground": return new CustomBackgroundNativeModule(reactContext); case "CustomMessage": return new CustomMessageModule(reactContext); case "CustomLocalPushAndroid": return new CustomLocalNotification(reactContext); case "RNAnalytics": return new RNAnalyticsModule(reactContext); case "RNReactNativeHapticFeedback": return new RNReactNativeHapticFeedbackModule(reactContext); default: return null; } } @Override public List createViewManagers(ReactApplicationContext reactContext) { List viewManagers = new ArrayList<>(); viewManagers.add(new CustomBackgroundViewManager()); viewManagers.add(new ReactVideoViewManager()); return viewManagers; } @Override public ReactModuleInfoProvider getReactModuleInfoProvider() { Class[] moduleList = new Class[] { CustomBackgroundNativeModule.class, CustomMessageModule.class, CustomLocalNotification.class, }; final Map reactModuleInfoMap = new HashMap<>(); for (Class moduleClass : moduleList) { ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); reactModuleInfoMap.put( reactModule.name(), new ReactModuleInfo( reactModule.name(), moduleClass.getName(), reactModule.canOverrideExistingModule(), reactModule.needsEagerInit(), reactModule.hasConstants(), reactModule.isCxxModule(), false)); } // Third Party libraries can not have @ReactModule annotation reactModuleInfoMap.put( "RNAnalytics", new ReactModuleInfo("RNAnalytics", "RNAnalytics", false, false, false,false, false) ); reactModuleInfoMap.put( "RNReactNativeHapticFeedback", new ReactModuleInfo("RNReactNativeHapticFeedback", "RNReactNativeHapticFeedback", false, false, false,false, false) ); return new ReactModuleInfoProvider() { @Override public Map getReactModuleInfos() { return reactModuleInfoMap; } }; } }