这些天为了在老的项目上使用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找不到的,这时基本只能去其官网或者仓库,升级到新版本再编译。
总结:升级不易,且行且珍惜(坑太多了)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)