1. 程式人生 > >Duplicate class com.blankj.utilcode.BuildConfig found in modules classes.jar

Duplicate class com.blankj.utilcode.BuildConfig found in modules classes.jar

20190410 放下 android 很久之後,最近又重新學習,開啟以前的專案,總是遇到各種問題,大部分發生在 gradle 相關細節

過去好好地專案,由於 Android Studio 升級,gradle 升級,突然出現各種警告、錯誤,總是很心煩的!

大部分問題以前也都處理過,當時解決完就過去了,沒有記錄,現在不得不重複處理好多相同型別的問題

1、當前環境

  1. android Studio 版本 : 3.4

  2. $ java -version java version "10.0.2" 2018-07-17 Java(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

  1. $ ./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、 錯誤處理

  1. 參考 https://blog.csdn.net/willhanweijia/article/details/87250386

  2. 檢查 Nodule 的 gradle //AndroidUtilCode implementation 'com.blankj:utilcode:1.21.0'

  3. 按照參考部落格,修改了 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 怎麼又重複了呢?

  4. 根據我自己的經驗,錯誤原因可能是 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 ... 所以不改也可以!

  5. 找到這個 Blankj 外掛的倉庫,看看最新版本是多少? https://github.com/Blankj/AndroidUtilCode

  6. implementation 改成最新版 1.23.7

     //AndroidUtilCode
     implementation 'com.blankj:utilcode:1.23.7'
    

    再次 rebuild ,ok了!

4、 後記:怎麼查詢某個外掛的開源倉庫?

原始專案是別人寫的,我不知道那些外掛他最初怎麼來的,所以我的方法很笨拙!誰能告訴我有什麼好辦法?

網上下載的很多sample 也是這樣的,都是一兩年之前的,其中的外掛一定不是最新的,如果遇到 rebuild 不過去,只能去查詢外掛的最近版本

以下是我的本辦法:

  1. 像這種 implementation 'com.github.Cutta:GifView:1.1' 直接開啟https://github.com 去搜索 關鍵字 GifView
  2. 像這種 implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-12' 的,我就直接輸入 網址 com.scwang.smartrefresh ,一般都是