每次升级Android Studio时,一般情况下Gradle版本的也会相应的升级,我之前Android Studio 3.0.1、Gradle 是4.1升级后为:Android Studio 3.1.0、Gradle 为4.4。

升级完成后先是报一堆错(每次都升级都是-。-)

第一个错如下:

The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?

翻译过来就是:

“SourceSet” 的'instrumentTest' 没有被Android Gradle插件识别。也许你拼错吗?

猜想可能Gradle移除了'instrumentTest'关键字,网上搜了一下,博客地址如下:http://www.it1352.com/139247.html

新版本Gradle对其做了重命名

即:

 旧版本 - > 新版本

 instrumentTestCompile - > androidTestCompile 

 instrumentTest  - > androidTest 

然后查看了自己所有module的Gradle,发现有一个地方用到了 instrumentTest ,将其改为 androidTest ,然后继续同步Gradle,然后编译,这个错误不报了。

第二个错误如下:

Configuration 'compile' is obsolete and has been replaced with 'implementation'.
It will be removed at the end of 2018

翻译过来就是:

配置“编译”已经过时,取而代之的是“实现”。它将在2018年底被移除。

我们知道,在Android Studio3.0开始的时候就将 compile 改为 implementation 关键字了,当时,项目中大部分的compile改为了implementation,但是还有一部分没有改过来,但是仍然可以使用,但是现在呢?尼玛直接给编译就报错!这不是强制性的让使用 implementation 么?报的错中提示2018年底才移除,这还没到年底呢,就不能用了?

还是乖乖的改吧,由于是我们的依赖的library中使用了compile,相当于是library依赖了一个第三方库,直接改为implementation就相当于屏蔽掉了app对library依赖的第三方库api的访问权限,而我们的app刚好用到了library依赖的第三方库的api,所以直接改为implementation是不行的,要想让app能访问到就将其改为 api就可以了,其实这不是一个好的解决办法,最好的解决办法是,library中封装一层app访问library依赖的第三方库api的方法,这样的话app是和library依赖的第三方库是没有任何关系的,这样就降低了app与library依赖的第三方库的耦合性,这样也体现了“第三方库隔离”的原则,如果以后依赖的库变了,你只需要修改library中依赖的库及app调用的方法即可,不用动app里面的代码了~

第三个错误如下

Duplicate zip entry [com/c/a/a/a/a.class == 69.jar:com/ta/utdid2/b/a/a.class]

翻译过来如下:

重复的类,即类所在的包名和类名都相等

一般情况下不会写包名和类名相同的类,我猜测一定是Jar包重了,仔细找了一下,发现两个library中都使用了
阿里的httpdns的jar包,只不过是Jar包的版本不一样,旧版本中其中一个library中使用了 provided 编译,所以没有报冲突,现在新版本推荐使用 compileOnly

关键字,替换为compileOnly关键字后还是报一样的错,哎呦!这就纳闷了,compileOnly的意思不就是编译时依赖,不打紧包中的意思吗?怎么还冲突?仔细查找了一下,发现其中一个library中多了一个混淆规则的jar包(utdid4all-1.1.5.3_proguard.jar),而另外一个没有,但是旧版本是没有问题的,我猜测可能是编译混淆后发现两个类是一样的所以就报错了…

解决办法一:

两个library中都添加 utdid4all-1.1.5.3_proguard.jar 使用 compileOnly 关键字编译;

解决办法二:

两个library中都不添加 utdid4all-1.1.5.3_proguard.jar

解决办法三:

在app中添加一个 utdid4all-1.1.5.3_proguard.jar 进行编译即可;

至此,以上几个错误都解决完了~

总结

我们应该理解implementation、api、compileOnly等几个关键字的区别,具体见下图:

这里写图片描述

最后附上几个参考链接:

https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph

https://stackoverflow.com/questions/44413952/gradle-implementation-vs-api-configuration

Android Studio3.1.0升级问题记录的更多相关文章

  1. 【Android Studio安装部署系列】三十六、从Android Studio3.1.4升级到Android studio3.2【以及创建android p模拟器(未成功)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 因为想要使用Android P模拟器,所以需要将Android Studio升级到3.2版本以上. 按照官网的说法:参考<ht ...

  2. Android Studio3.1.2升级问题:Configuration 'compile' is obsolete and has been replaced with 'implementation'.

    每次升级Android Studio时,一般情况下Gradle版本的也会相应的升级,我之前Android Studio 3.0.1.Gradle 是4.1升级后为:Android Studio 3.1 ...

  3. 【Android】Android6.0读取通话记录

    需求:读取通话记录,然后列表显示,每条记录的数据包括姓名.号码.类型(来电.去电.未接,字体颜色分别为绿.蓝.红),然后长按条目弹出一个列表弹窗,显示[复制号码到拨号盘].[发短信].[打电话]. 先 ...

  4. 【Android Studio安装部署系列】三十、从Android studio2.2.2升级到Android studio3.0之路

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Android Studio 3.0的新功能 https://mp.weixin.qq.com/s/2XmVG4mKEDX6-bvZ ...

  5. 【Android Studio安装部署系列】三十五、从Android studio3.0.1升级到Android studio3.1.4【以及创建android p模拟器的尝试(未成功)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 因为想要使用Android P模拟器,所以需要将Android Studio升级到3.1版本以上. Android P模拟器的最低版 ...

  6. 【Android Studio安装部署系列】三十七、从Android Studio3.2升级到Android Studio3.4【以及创建Android Q模拟器】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 保持Android Studio开发环境的最新版本. 下载Android Studio3.4 使用Android Studio自带的 ...

  7. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)

    Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程) 看到网上AS3.0新增加的查看手机文件的新功能,全部都是转载的,没有几个人心细的把如何打开 ...

  8. 浅谈Android Studio3.0更新之路(遇坑必入)

    >可以参考官网设置-> 1 2 >> Fantasy_Lin_网友评论原文地址是:简书24K纯帅豆写的我也更新一下出处[删除]Fa 转自脚本之家 浅谈Android Studi ...

  9. Android Studio3.0 新特性 ~ New Features in Android Studio Preview (译文)

    原文地址:https://developer.android.google.cn/studio/preview/features/index.html 最新Android Studio版本是Andro ...

随机推荐

  1. 【01】魔芋使用MDN的一点点经验

    [01]魔芋使用MDN的一点点经验     1,MDN地址: https://developer.mozilla.org/en-US/(下图)   2,建议看英文原文.因为中文翻译落后,并且有些翻译并 ...

  2. HR面试你需要注意什么?

    公司的面试流程一般是笔试—>技术面试—>hr面试,在大部分应聘测试工程师这种技术岗的应聘者理解中,通常认为通过技术面试了,后面的hr面试基本就是走流程过形式.也正因如此,我们习惯性地把精力 ...

  3. .net中的协变和逆变

    百度:委托中的协变和逆变. 百度:.net中的协变和逆变. 协变是从子类转为父类. 逆变是从父类到子类. 这样理解不一定严谨或者正确.需要具体看代码研究.

  4. hdu 2295 dlx重复覆盖+二分答案

    题目大意: 有一堆雷达工作站,安放至多k个人在这些工作站中,找到一个最小的雷达监控半径可以使k个工作人所在的雷达工作站覆盖所有城市 二分半径的答案,每次利用dlx的重复覆盖来判断这个答案是否正确 #i ...

  5. [luoguP2962] [USACO09NOV]灯Lights(高斯消元 + dfs)

    传送门 先进行高斯消元 因为要求最少的开关次数,那么: 对于关键元,我们可以通过带入消元求出, 对于自由元,我们暴力枚举,进行dfs,因为只有开关两种状态,0或1 #include <cmath ...

  6. poj 3678 XOR和OR和AND(简单2-sat问题)

    /* 题意:给你一些边,每条边有一个值和一个运算符XOR OR AND求是否存在一些点使得所有的边根据这些运算符 可以符合条件的权值. 建边方式参考:http://blog.csdn.net/shua ...

  7. hdu 4790 数学

    /* 题意:给你二个区间[a,b]和[c,d] 分别从中选一个数x和y使的(x+y)%p=m; 可以这样来求,先求出(0->b和0->d区间段的值)-(区间0->a-1和0-> ...

  8. ubuntu samba 配置简介

    Ubuntu 11.04下虚拟机Samba的共享配置详细步骤 一. Ubuntu 11.04下Samba的安装: $ sudo apt-get insall samba                 ...

  9. 《effective C++》:条款37——绝不重新定义继承而来的缺省参数值

    引子: 阿里的一道题: #include <IOSTREAM> using namespace std; class A{ public: ) { cout<<"a~ ...

  10. php之ThinkPHP的memcached类的修改

    php之ThinkPHP的memcached类的修改 在Think\Cache\Driver\Memcached.class.php中,增加方法获取错误信息的方法,方便调试, public funct ...