我使用React Native构建了一个Android应用程序,它已经成功构建但是当我在我的Android虚拟设备中运行应用程序时,它会显示一个完整的红色屏幕,并显示以下错误:
我之前没有完成本机应用程序开发,也没有任何Java知识,所以我不知道这个错误意味着什么,以及如何解决这个问题。
答案 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()
);
}
然后在终端中尝试此命令后:
答案 3 :(得分:8)
如果您使用的RN版本> = 0.60,则自动链接和手动链接可能两次执行相同的操作。您有两种选择:
1-您可以使用getPackages
方法恢复代码更改
2-您可以在react-native-config.js
文件中禁用自动链接。
答案 4 :(得分:4)
@Override
public boolean canOverrideExistingModule() {
return true;
}
将这些代码添加到您的本机模块构造函数中就可以了
答案 5 :(得分:3)
您可以尝试在目录中检入文件MainApplication.java
:android\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运行。 否则,请删除库反应导航,然后仅执行它即可。