Android端NativeModules无法调用求助(iOS端运行正常)
Android NativeModule未定义问题排查与修复
核心问题点
1. 原生模块名称与JS调用名称不匹配
在HelloModule.java中,getName()方法返回的是"HelloNativeModule",但JS代码里调用的是HelloModule,两者名称不匹配:
@Override public String getName() { return "HelloNativeModule"; // 原生模块对外暴露的JS名称 }
const { HelloModule } = NativeModules; // JS中使用的名称和原生返回值不一致
2. MainApplication中添加的Package类错误
在MainApplication.java的getPackages()方法里,你添加的是new Hello(),但实际定义的Package类是HelloPackage,类名完全错误:
packages.add(new Hello()); // 错误:应该是new HelloPackage()
3. HelloPackage注释语法错误(不影响功能但需修正)
HelloPackage.java的注释里重复引用了HelloPackage,正确的注释应该指向实际暴露的模块:
/** * Exposes {@link HelloModule} to JavaScript. * One {@link ReactPackage} can expose any number of {@link NativeModule}s. */
修复步骤
统一模块名称:
两种方案二选一:- 方案一:修改原生模块的
getName()返回值,和JS调用名一致:@Override public String getName() { return "HelloModule"; } - 方案二:修改JS代码,使用原生模块返回的名称:
const { HelloNativeModule } = NativeModules; HelloNativeModule.openViewDummy();
- 方案一:修改原生模块的
修正MainApplication中的Package类:
将错误的new Hello()替换为正确的new HelloPackage():@Override protected List<ReactPackage> getPackages() { List<ReactPackage> packages = new PackageList(this).getPackages(); packages.add(new HelloPackage()); // 修正此处 return packages; }清理缓存并重新编译:
- 清理Android编译缓存:
cd android && ./gradlew clean - 重启Metro服务并清除缓存:
npx react-native start --reset-cache - 重新运行Android应用:
npx react-native run-android
- 清理Android编译缓存:
内容的提问来源于stack exchange,提问作者SREE CHARAN NAMPALLY
相关产品推荐
相关产品推荐

