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
小智 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)
然后在终端中尝试此命令后:
小智 10
@Override
public boolean canOverrideExistingModule() {
return true;
}
Run Code Online (Sandbox Code Playgroud)
将这些代码添加到您的本机模块构造函数中就可以了
如果您使用的RN版本> = 0.60,则自动链接和手动链接可能两次执行相同的操作。您有两种选择:
1-您可以还原getPackages
方法中的代码更改
2-您可以禁用react-native-config.js
文件中的自动链接。
以上解决方案都是正确的,但让我稍微解释一下,上述一些解决方案建议覆盖以下方法。
@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扩展的类,但是您需要针对将创建重复问题的特定项目,在那里您应该覆盖它。
归档时间: |
|
查看次数: |
24353 次 |
最近记录: |