由于自5月开始,android的托管库jCenter跑路,导致一大批RN的安卓依赖库无法找到编译下载内容,致使安卓项目无法编译、无法调试、无法打包;公司的rn项目更是一度搁置;现在记录一下处理问题的流程
在[PROJECTNAME]\android\build.gradle 中将有关jCenter()的内容删除;有朋友提示说可以给maven添加jcenter的阿里云镜像,反正在试错,总之先添加了
repositories {
google()
// jcenter()
maven{ url "https://maven.aliyun.com/repository/jcenter"}
mavenCentral()
}
大部分的库应该是可以正常运行,通过npx react-native run-android 后发现还有很多库是无法运行的,我们可以在npm的包管理网站上看一下有没有五月后的提交,如此有机会复活一些库,例如5^版本的react-native-video,可以通过安装它最新的Alpha版本
npm install react-native-video@6.0.0-alpha.1
总之先查看 说不定不需要强装alpha库;
还有一些库是彻底无法运行了 ,其原因基本就是
Execution failed for task ':app:validateSigningDebug',Keystore file '/Users/xxx/yyy.jks' not found
二来,有些 年久失修 的库,我们只好暂时屏蔽其在编译中会执行的语句,处理方式是在
[PROJECTNAME]\android\app\build.gradle 的dependices{} 里面屏蔽相应的内容,
dependices{
--Keeps rest--
// implementation project(‘:react-native-baidumap-sdk’)
--Keeps rest--
}
在 [PROJECTNAME]\android\settings.gradle 中将相应的代码注释
--Keeps rest--
// include ':react-native-baidumap-sdk'
// project(':react-native-baidumap-sdk').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-baidumap-sdk/lib/android')
--Keeps rest--
在 [PROJECTNAME]\android\app\src\main\java\com\barapp\MainApplication.java 中将相应的import注释 并将其实例化删除
...
// import cn.qiuxiang.react.baidumap.BaiduMapPackage;
...
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
// new BaiduMapPackage(), // 注释这句就好
);
}
基本上到这一步 项目是可以编译成功了,但是会出现两个问题
Unable to load script, Make sure you`re either running a Metro server(run 'react-native start' ) or that your bundle 'index.android,bundle' is packaged correctly for release
基本上就是在load你的首页的时候去获取那些dependices时找不到库或者库版本不匹配等等导致项目不能正常运行。这时候去项目中相关的库引用的地方做屏蔽处理吧;之后再考虑有没有其他的第三方库做替代方案。
总结:
1.对于安卓项目,最好是公司或者自己能做库的本地托管,以防这种情况的出现。
2.小心RN