You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.
 */

修复步骤

  1. 统一模块名称:
    两种方案二选一:

    • 方案一:修改原生模块的getName()返回值,和JS调用名一致:
      @Override
      public String getName() {
          return "HelloModule";
      }
      
    • 方案二:修改JS代码,使用原生模块返回的名称:
      const { HelloNativeModule } = NativeModules;
      HelloNativeModule.openViewDummy();
      
  2. 修正MainApplication中的Package类:
    将错误的new Hello()替换为正确的new HelloPackage():

    @Override
    protected List<ReactPackage> getPackages() {
        List<ReactPackage> packages = new PackageList(this).getPackages();
        packages.add(new HelloPackage()); // 修正此处
        return packages;
    }
    
  3. 清理缓存并重新编译:

    • 清理Android编译缓存:
      cd android && ./gradlew clean
      
    • 重启Metro服务并清除缓存:
      npx react-native start --reset-cache
      
    • 重新运行Android应用:
      npx react-native run-android
      

内容的提问来源于stack exchange,提问作者SREE CHARAN NAMPALLY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:40:10