20190410 放下 android 很久之后,最近又重新学习,打开以前的项目,总是遇到各种问题,大部分发生在 gradle 相关细节
过去好好地项目,由于 Android Studio 升级,gradle 升级,突然出现各种警告、错误,总是很心烦的!
大部分问题以前也都处理过,当时解决完就过去了,没有记录,现在不得不重复处理好多相同类型的问题
1、当前环境
android Studio 版本 : 3.4
$ java -versionjava version "10.0.2" 2018-07-17Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
** 一直以为自己使用的是 java 8 ,此刻记录博客时才知道一直使用的是 java 10** 回头升级到 java 11 或者降级到 java 8
$ ./gradlew -v
------------------------------------------------------------ Gradle 5.1.1 ------------------------------------------------------------ Build time: 2019-01-10 23:05:02 UTC Revision: 3c9abb645fb83932c44e8610642393ad62116807 Kotlin DSL: 1.1.1 Kotlin: 1.3.11 Groovy: 2.5.4 Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018 JVM: 10.0.2 ("Oracle Corporation" 10.0.2+13) OS: Mac OS X 10.14.4 x86_64
2、错误
rebuild 失败! 最后错误提示部分如下
...
* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
java.lang.RuntimeException: Duplicate class com.blankj.utilcode.BuildConfig found in modules classes.jar (com.blankj:bus:1.0) and classes.jar (com.blankj:utilcode:1.21.0)
Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>.
3、 错误处理
参考https://blog.csdn.net/willhanweijia/article/details/87250386
检查 Nodule 的 gradle//AndroidUtilCodeimplementation 'com.blankj:utilcode:1.21.0'
按照参考博客,修改了 buildTypes 部分
buildTypes { debug { minifyEnabled false //minifyEnabled true //shrinkResources true //自动清理无用资源 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } release { //minifyEnabled false minifyEnabled true shrinkResources true //自动清理无用资源 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
刚开始注释掉 debug 的 proguardFiles ,好像对了一次!等我确认再次 rebuild 的时候,还是宝一样的错误!blankj.utilcode 怎么又重复了呢?
根据我自己的经验,错误原因可能是 implementation 的插件版本落后了,不适合我当前的 AS 或 gradle 版本,或者是编译 SDK、API 升级造成的之前 gradle 设置是这样的
android { compileSdkVersion 27 buildToolsVersion '27.0.3' ...
同步的时候,会出现以下警告:
CONFIGURE SUCCESSFUL in 1s WARNING: The specified Android SDK Build Tools version (27.0.3) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle Plugin 3.4.0. Android SDK Build Tools 28.0.3 will be used. To suppress this warning, remove "buildToolsVersion '27.0.3'" from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools. Remove Build Tools version and sync project Affected Modules: app
** 按照警告提示,注释掉 buildToolsVersion '27.0.3' !
android { compileSdkVersion 27 //buildToolsVersion '27.0.3' ...
** 应该直接修改 compileSdkVersion 以及后面的 'com.android.support:appcompat-v7:27.1.1' 等,既然 sync 的时候提示Android SDK Build Tools 28.0.3 will be used ...所以不改也可以!
找到这个 Blankj 插件的仓库,看看最新版本是多少?https://github.com/Blankj/AndroidUtilCode
implementation 改成最新版 1.23.7
//AndroidUtilCode implementation 'com.blankj:utilcode:1.23.7'
再次 rebuild ,ok了!
4、 后记:怎么查找某个插件的开源仓库?
原始项目是别人写的,我不知道那些插件他最初怎么来的,所以我的方法很笨拙!谁能告诉我有什么好办法?
网上下载的很多sample 也是这样的,都是一两年之前的,其中的插件一定不是最新的,如果遇到 rebuild 不过去,只能去查找插件的最近版本
以下是我的本办法:
- 像这种 implementation 'com.github.Cutta:GifView:1.1' 直接打开https://github.com 去搜索 关键字 GifView
- 像这种 implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-12' 的,我就直接输入 网址 com.scwang.smartrefresh ,一般都是百度出来的