gradle版本2.3.3升级到3.4.2踩坑
小记
公司的项目一直在gradle2.3.3下,然后一直不敢升级,之前刚拿到项目的时候尝试了升级,各种报错各种漂红;吓得一直不敢动;另外对于gradle的版本,什么plugin的版本其实一直有点搞不明白;主要有涉及到的有:
升级gradle的版本
上面三张图提到的应该分别叫做,gradle plugin的版本,gradle的版本和 AndroidStudio的版本,而这几个东西的版本是有对应关系的;升级plugin的版本gradle的版本往往也需要升级;当然AS也最好升级到最新版。
Google官网gradle和gradle plugin的对应关系
这里我直接去改了gradle plugin的版本到3.4.2然后跟着AS的提示一路更新;
一.plugin升级到3.0以上后compile接口的废用
在新的gradle版本下模块中添加依赖的方法compile导入变成了implementation:
主要涉及到各个 module 下dependencies {} 中的改动
compile ——> implementation
androidTestCompile ——> androidTestImplementation
testCompile ——> testImplementation
按照AS的提示完成所有的更改,这里可以一键更改,可以先复制好“implementation” Ctr+F 在文件内搜索compile,然后点下图的位置Ctr+V 粘贴;
全部换好后点击这个 “Sync Now” 好像就不报错了。但是当然还没有结束;
点击build一片标红
大概就是这个样子的,很多文件里的 import 导包都找不到包,然后这么多文件要一个一个手动去处理么???况且还不知道怎么处理;然后注意到报错信息,除了这些,上面Run tasks里面还有报错;
然后在百度上搜报错信息,各种找这几篇对我有所启发;
Android Error:Execution failed for task ‘:app:compileDebugJavaWithJavac’ 解决方案
这篇我尝试了下利用cmd进入到项目文件下:
把命令gradlew compileDebug --stacktrace
改成 gradlew 我自己的报错task名称
结果下面那些文件的各种找不到包都跳出来了,这意思是让我先解决下面这些文件的报错呀。
于是看了一下下面报错的文件,大部分都是导包失败,各种找不到包:
关注到主要涉及到的包有:
com.nostra13.universalimageloader.XXX
com.umeng.share.XXX
我想难道是这些包版本都太老了需要升级?第一个包是加载图片用的,由于项目里加载图片的框架引入了好几个,要不就放弃这个Imageoader 的框架,于是干脆删掉了关于这个包的全部文件的错误导包,把文件里使用的部分改为Glide框架;手工操作干了一下午;然后这个umeng的我也去官网下载了最新的分享SDK,并放入到umeng的module下的lib中,修改module下的build.gradle中的引用,clean一下, build一下发现还是找不包;有点郁闷了;于是再度查了下发现了这篇:
implementation、api与多模块依赖
大概就是说以前的compile变成了implementation和api;在主模块中的依赖用implementation完全没问题,可是在其他模块中引入外部的包而这些外部包又需要在主模块引用时,如果用implementation是不允许包被外部引用的此时要用api,而我的umeng分享的确实在一个单独的模块里,于是跑去模块中把对应的jar包的依赖变成api 发现都能找到包了。
jar包版本冲突或者引入重复
再次build一下:
还是报错;
这次找到这篇:
【我的Android进阶之旅】解决Android编译时候出现错误:java.util.zip.ZipException: zip file is empty
看到我的报错信息也的确时由ZipException:zip file is empty这个引起的。这个意思时导入的jar包中有的文件已经损坏,或者jar包冲突导致;然后检查了一下发现umeng模块下确实有几个之前的用于分享的jar包是0kb的状态,因为我已经放入了新版的jar包,所以我直接删掉了;然后build还是报错,这次报错信息是:
Duplicate class android.support.design.widget.CoordinatorLayout found
in modules classes.jar (com.android.support:coordinatorlayout:28.0.0)
and classes.jar (com.android.support:design:26.1.0)。
这个又是什么意思呢?我猜测大概是说我这个module里的 android.support.design.widget.CoordinatorLayout 这个包被引入了两次,而且版本不一致;然后我试着把主模块的targitSDK改成26,把umeng中的引入改成28都没有用。最后发现是在模块中把implementation改成api的另外一个模块下的
把上面那些改成28.0.0版本后clean一下项目,build一下,好像成功了!!!
完成升级后给自己留下的坑
至此,就算勉强完成升级了,但是还是给自己留下了几个坑:
1.删除掉LoadImage一系列的包,大量修改了文件中的图片加载方式(改为Glide),然后发现一个recyclereview列表下面的图片全部加载不出来了;
2.截图分享,截出一个View的图片通过友盟分享出去;现在分享出去什么都没有,应该是生成截图的时候出问题了,因为删除ImageLoader对应的包,其下面的一个工具类也被一起删掉了,而生成截图的时候用这个工具里的方法生成了一个File对象,并指定了路劲;
3.一个核心的弹窗popup功能今天早上测试失效了,暂时还没有去查原因;
好了我去填坑了!就先这样吧。。。。