android将Gradle从3.x升级到7.x的过程
Posted LZ涸泽而渔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android将Gradle从3.x升级到7.x的过程相关的知识,希望对你有一定的参考价值。
这些天为了在老的项目上使用Compose,于是将Gradle从3.3.3 升级到了7.0.4,其中经历了百来个Error的折磨,一点一点的解决后,终于成功run起了项目,将踩过的坑分享出来,以便同样需求的人参考。
1:依赖方式的改变:
buildscript或者allProjects,老的项目依赖了许多的jecenter仓库与maven仓库,在gradle升级后,很多时候会爆仓库不安全错误,其中有LIKE(HTTPS)字样,需要将地址从http改为https,例如:
maven url "http://jitpack.io" --> maven url "https://jitpack.io"
而有些仓库地址 只有http的版本时,需要添加allowInsecureProtocol去绕过检测,如:
maven allowInsecureProtocol(true) url "http://mvn.mob.com/android"
2:compileSdkVersion与targetSdkVersion版本改变
这个根据error提示,改成需求的队友版本即可,不过参与编译的只有compileSdkVersion,所以根据实际情况来就可以了,注意去sdkmanager中下载需要的版本
3:一些语法上的更改
compile改为implementation或者api,implementation可以认为private,只允许当前model使用的依赖,api是public,别的model依赖当前包后,如果当前包依赖申明为api,则后者默认也依赖了这个包(有些扰,简而言之,implementation依赖的包体只能在当前model使用,api依赖的包体,可以当这个model被依赖时,被使用)。
apply plugin ‘xxx’ 更改为 plugins id 'xxx' id'xxx'方式
4:当找不到sdk依赖时
有一些厂家,当gradle升级后,你在他的仓库里找不到依赖路径的包(例如阿里百川),而你出于各种考虑并不想去升级这一部分的sdk,且他的仓库已关闭,你获取不到老版本的sdk,这时你可以尝试下我的思路->
(1):运行老版本工程,sync工程,获得申明的各种sdk
(2):在gradle缓存中,找到对应包名的aar或者jar,将其移动至升级工程中,然后以本地化依赖的方式进行,gradle缓存地址,以mac为例在.gradle/caches/modules-2/file-2.1中,其中 .gradle为隐藏文件,command+shift+. 这个组合按键可显示出,然后根据aar对应的包名去寻找对应的aar包体,例如:
以上能解决大部分sdk找不到的问题
5:gradle.properties中有一些以前的配置不再需要,可进行删除,例如:
com.android.build.gradle.overridePathCheck=true
android.enableD8.desugaring=false
6: gradleJDK依赖版本,通常都会从 1.8 改为11,如下->
7:一些其他的问题:
可能会存在一些其他的sdk包体编译报错或者运行报错的问题,这时一般error信息会比较清晰的展示出来,例如github上面的sdk错误,很多时候在其仓库的issues中都会存在,找到并修复就好,
还有一些硬性的plugin找不到的,这时基本只能去其官网或者仓库,升级到新版本再编译。
总结:升级不易,且行且珍惜(坑太多了)
以上是关于android将Gradle从3.x升级到7.x的过程的主要内容,如果未能解决你的问题,请参考以下文章
升级到 Gradle 6 和 Android Gradle 插件 4.0.0 无法获取“https://dl.google.com/android/repository/addons_list-3.x
将 android gradle 插件从 4.2.1 升级到 7.0.1 后出现错误
在Android Studio中将Gradle从3.3升级到4.1后出错
CentOS 7.x下升级Python版本到3.x系列(新老版本共存)
将 Android Studio 的 Gradle 插件升级到 3.0.1 和 Gradle 到 4.1 后无法复制配置依赖项