如何在React Native for Android Apps中设置canOverrideExistingModule = true?

Utk*_*pta 52 java android android-virtual-device react-native

我使用React Native构建了一个Android应用程序,它已经成功构建但是当我在我的Android虚拟设备中运行应用程序时,它会显示一个完整的红色屏幕,并显示以下错误:

在此输入图像描述

我之前没有完成本机应用程序开发,也没有任何Java知识,所以我不知道这个错误意味着什么,以及如何解决这个问题.

efx*_*efx 99

与此错误关联的包的名称不是,AirMapModule而是MapsPackage来自com.airbnb.android.react.maps.

在您MainApplication.java的目录中:android/app/src/main/java/../../删除任何重复的条目:

  • 进口包: import com.airbnb.android.react.maps.MapsPackage
  • 对模块构造函数的调用:new MapsPackage()in functiongetPackages

  • 第一个子弹在网上随处可见,但这是第一个提到第二个寻找重复的地方.谢谢. (5认同)
  • 当您尝试在 MainApplication.java 文件中两次导入相同的包时会出现此错误 (2认同)

小智 38

转到文件"MainApplication.java"(在.\ android\app\src\main\java\com\projectName下)

确保在getPackages()函数下你没有重复的行(在我的情况下,我有两次"new MapsPackage()").

修复重复导入.

祝好运


小智 13

转到MainAplication文件.

删除重复的包并删除getPackages()方法中的重复包

  @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new VectorIconsPackage()
      );
    }
Run Code Online (Sandbox Code Playgroud)

然后在终端中尝试此命令后:

  • cd android
  • ./gradlew清洁


小智 10

  @Override    
  public boolean canOverrideExistingModule() {        
    return true;    
  }   
Run Code Online (Sandbox Code Playgroud)

将这些代码添加到您的本机模块构造函数中就可以了

  • 您本机模块的确切含义是什么?图书馆?我收到错误消息“模块未从其超类覆盖方法” (4认同)
  • 有人可以更详细地说明此解决方案吗?请告诉我们什么以及在哪里... (4认同)
  • 感谢@Andew Fan 真正回答了这个问题 (3认同)
  • 到底应该在哪里添加这个片段? (3认同)

Mah*_*ary 8

如果您使用的RN版本> = 0.60,则自动链接和手动链接可能两次执行相同的操作。您有两种选择:

1-您可以还原getPackages方法中的代码更改
2-您可以禁用react-native-config.js文件中的自动链接。


I B*_*I B 7

以上解决方案都是正确的,但让我稍微解释一下,上述一些解决方案建议覆盖以下方法。

@Override    
public boolean canOverrideExistingModule() {        
  return true;    
} 
Run Code Online (Sandbox Code Playgroud)

问题是在哪里覆盖?首先,您不能在 MainActivity.java 或 MainApplication.java 文件中覆盖。

您应该在某个 node_modules 项目文件夹内的类中覆盖它,并且该类将从ReactContextBaseJavaModule类扩展 。

在我的情况下,它没有在导入/添加重复包中重复,但这主要是因为自动链接导致重复。

我正在使用 react-native-contacts npm 包进行交互,所以我所做的就是进入

node_modules\react-native-contacts\android\src\main\java\comrt2zz\reactnativecontacts\ 
ContactsManager.java 
Run Code Online (Sandbox Code Playgroud)

这个ContactsManager是从ReactContextBaseJavaModule扩展而来的,我在那里覆盖并解决了问题。

因此,一般来说,node_modules内的不同项目下可能会有很多ReactContextBaseJavaModule扩展的类,但是您需要针对将创建重复问题的特定项目,在那里您应该覆盖它。