当前位置: 首页 > 工具软件 > JCenter > 使用案例 >

React-native 项目由于jCenter跑路后的填坑之旅

姬烨磊
2023-12-01

由于自5月开始,android的托管库jCenter跑路,导致一大批RN的安卓依赖库无法找到编译下载内容,致使安卓项目无法编译、无法调试、无法打包;公司的rn项目更是一度搁置;现在记录一下处理问题的流程

Step1:将项目git文件重新下载在一个新的文件夹中,进行隔离操作

Step2:现在理论上只有google() mavenCentral() 库是正常的托管状态;

在[PROJECTNAME]\android\build.gradle 中将有关jCenter()的内容删除;有朋友提示说可以给maven添加jcenter的阿里云镜像,反正在试错,总之先添加了

 repositories {
       google()
//     jcenter()
       maven{ url "https://maven.aliyun.com/repository/jcenter"}
       mavenCentral()
   }

Step3:重新npm install / yarn add,

大部分的库应该是可以正常运行,通过npx react-native run-android 后发现还有很多库是无法运行的,我们可以在npm的包管理网站上看一下有没有五月后的提交,如此有机会复活一些库,例如5^版本的react-native-video,可以通过安装它最新的Alpha版本

npm install react-native-video@6.0.0-alpha.1

总之先查看 说不定不需要强装alpha库;

还有一些库是彻底无法运行了 ,其原因基本就是

  1. 该库是托管在JCenter上面的库,由于库没什么人使用,或者作者可能都忘了写了这么个库;jc跑路之后作者也没有将托管放到谷歌或者maven上面,比如react-native-baidumap-sdk
  2. 该库是正常的,但是其依赖的另外的库是托管在另外的库上面的;重新安装后会导致两个问题,一来是会报android.keyStore的错误,毕竟是下载的新项目,我就把原先项目中的文件复制过去了,没有深究;
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(),                     // 注释这句就好
      );
    }

Step4 对项目中的引用部分做处理

基本上到这一步 项目是可以编译成功了,但是会出现两个问题

  1. 项目能正常安装,但是app在打开的时候就卡死,甚至于影响到其他app的正常启动
  2. 项目正常安装并打开,但是在调试界面显示会报错
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

 类似资料: