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

时间:2017-01-25 08:14:31

标签: java android react-native avd

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

enter image description here

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

13 个答案:

答案 0 :(得分:94)

与此错误相关联的软件包的名称不是AirMapModule,而是来自MapsPackage的{​​{1}}。

com.airbnb.android.react.maps目录中:MainApplication.java删除任何重复的条目:

  • 导入包:android/app/src/main/java/../../
  • 对函数import com.airbnb.android.react.maps.MapsPackage
  • 中模块的构造函数的调用:new MapsPackage()

答案 1 :(得分:34)

转到文件“MainApplication.java”(位于。\ android \ app \ src \ main \ java \ com \ projectName下)

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

修复重复导入。

祝你好运

答案 2 :(得分:12)

转到 MainAplication文件

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

中的重复包
  @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new VectorIconsPackage()
      );
    }

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

  • cd android
  • ./ gradlew clean

答案 3 :(得分:8)

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

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

答案 4 :(得分:4)

  @Override    
  public boolean canOverrideExistingModule() {        
    return true;    
  }   

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

答案 5 :(得分:3)

您可以尝试在目录中检入文件MainApplication.javaandroid\app\src\main\java是否存在任何重复的包AirMapModule,如果有,则删除1。

答案 6 :(得分:2)

解决方案

转到android/app/src/main/java/YOURPACKAGE/MainApplication.java

查找方法getPackages();

删除此packages.add(new MapsPackage());

凉丸! :)

答案 7 :(得分:2)

转到您的模块(正在收到此错误消息的原因),打开模块。向其添加此代码...

@Override    
public boolean canOverrideExistingModule() {        
  return true;    
}   

答案 8 :(得分:1)

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

@Override    
public boolean canOverrideExistingModule() {        
  return true;    
} 

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

您应该在某些node_modules项目文件夹内的类中重写它,该类将从 ReactContextBaseJavaModule 类扩展。

在我的情况下,导入/添加重复包中并没有发生重复,但这主要是由于处的自动链接导致重复出现。

我正在使用react-native-contacts npm软件包进行交互,所以我所做的就是里面的东西

node_modules\react-native-contacts\android\src\main\java\comrt2zz\reactnativecontacts\ 
ContactsManager.java 

,并且此 ContactsManager 是从 ReactContextBaseJavaModule 扩展的,我在此进行了覆盖并解决了问题。

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

答案 9 :(得分:0)

检查您的MainApplication.java,尤其是protected List<ReactPackage> getPackages()AirMapModule可能是列表中的两次

答案 10 :(得分:0)

仅添加此处未自动链接的模块,

        @Override
        protected List<ReactPackage> getPackages() {
          @SuppressWarnings("UnnecessaryLocalVariable")
          List<ReactPackage> packages = new PackageList(this).getPackages();
          // Packages that cannot be autolinked yet can be added manually here, for 
          // example: packages.add(new MyReactNativePackage());         
          return packages;
        }

如果模块是自动链接的,并在此处添加了模块,则会出现此错误。

答案 11 :(得分:0)

只需删除 packages.add(new MapsPackage()); 这一行 MainApplication.java

答案 12 :(得分:-1)

如果已安装的库反应导航,则可以通过android studio运行。 否则,请删除库反应导航,然后仅执行它即可。