react-native项目无法运行的暴力解决方案

当你在看到这篇博客的时候,可能正在为RN无法运行而感到头疼。我还是很遗憾地想说,我并不能保证以下方法能够成功,毕竟这些只是我的经历。

方法1.排错

根据报错提示进行排错,适合偶然出现的小错误,是最直接的方法。
如果是接手别人遗留的无法运行的项目,那就看运气了,因为一个错误解决了,还有另一个错误等着你。
可以看一下我对某个项目的排错笔记,可能看起来挺乱的,毕竟当时是写给自己看的

------分割线:排错笔记-------

react-native run-android的报错信息不够详细时,可在android studio中build,并在android目录下运行gradlew [报错信息] --stacktrace(gradlew [报错信息] --stacktrace,例如报错:app:processDebugManifest FAILED就运行gradlew processDebugManifest --stacktrace,一般如此,但也不一定是这样,具体参照网上资料)查看详细记录,有时会给出操作意见。
参考:Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get m
参考:Manifest merger failed with multiple errors, see logs问题处理

  • 遇到的错误

1、:app:processDebugManifest FAILED
参考:react-native run-android Build failed报错(:app:processDebugManifest FAILED)

android目录下运行gradlew processDebugManifest --stacktrace,看到给出了建议Suggestion: add 'tools:replace="android:appComponentFactory"' to application element at AndroidManifest.xml... 根据建议添加后报错误2

2、Error: tools:replace specified at line:14 for attribute android:appComponentFactory, but no new value specified
E:\Android\Job\TestDemoProject\github\BaseApplication\BaseApplication\app\src\main\AndroidManifest.xml
Error: Validation failed, exiting
参考:解决 导入三方时出现: appComponentFactory 错误
解决:

<application
 tools:replace="android:appComponentFactory" //除了这行之外
   android:appComponentFactory="任意字符"  //还要加上这一行

3、:app:transformDexArchiveWithExternalLibsDexMergerForDebug

android studio中在android目录下运行gradlew transformDexArchiveWithExternalLibsDexMergerForDebug --stacktrace查看详细报错。
参考:jar冲突 - app:transformDexArchiveWithExternalLibsDexMergerForDebug
参考:问题:com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

4、:app:transformClassesWithMultidexlistForDebug
Duplicate zip entry [97.jar:androidx/versionedparcelable/CustomVersionedParcelable.class]
参考资料

dependencies {
configurations {
    all*.exclude group: 'androidx.core', module: 'core'
   }
}

5、:app:transformResourcesWithMergeJavaResForDebug
More than one file was found with OS independent path 'META-INF/***'
参考资料

android{
    ...
    ...
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }

}

6、react-native run-android Could not read path...(常见
参考资料
cd android && gradlew clean
或者删app目录下的build文件夹

7、Error type 3
Error: Activity class {com.aiworks/com.aiworks.MainActivity} does not exist.

--------分割线---------

以上是android调试,到最后问题7的时候项目其实已经build successful了,然而就报了这么一个错不给我跑,排错就这么失败了。

方法2.迁移

  • 重新初始化一个RN项目,并确保能运行
  • 在新项目中重新安装第三方组件和依赖
    对于需要修改android或ios代码的第三方组件,最好是单独安装,安装并配置好后确保项目能够运行,若无法运行可先略过,先安装其他依赖。其他不需要额外配置的依赖,可直接写入package.json并npm install 或 yarn。
  • 拷贝旧项目的js代码,进行最终调试。

我通过方法2成功地让项目跑起来了。

注意事项

  • 某些第三方组件的配置文档可能并不适用最新的RN版本,比如现在RN已经不需要手动link了,并且MainApplication.java中的getPackages() 方法中不需要再手动添加包了。
  • ios可以使用cocoaPods来管理第三方组件,在ios/目录下运行pod install就可以安装第三方组件,cocoaPods需要 .podspec文件,年代比较久远的第三方组件可能没有这个文件,就需要自己手动加,
    示例:https://github.com/rt2zz/react-native-contacts/blob/master/react-native-contacts.podspec

猜你喜欢

转载自www.cnblogs.com/deepdarkdeveloper/p/11914218.html