Android Studio升級3.0及以上版本後,升級gradle版本引發的問題,最全解決方案

Android Studio升級3.0及以上版本後,升級gradle版本引發的問題,最全解決方案

  1. 我的電腦升級到的版本是Android Studio 3.6;
    項目升級gradle從3.5到4.4(這裏指的是gradle/wrapper/gradle-wrapper.properties中的版本)
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

同時,將根目錄中的build.gradle中的gradle更新到了3.1.4,原來是2.2.3
classpath’com.android.tools.build:gradle:3.1.4’
2. 之後就是漫長的等待,然後就報錯了

Error:Cannotchoose between the following configurations of project :alarmscene:
- debugApiElements
- debugRuntimeElements
- releaseApiElements
- releaseRuntimeElements
  1. 上網搜索了一下解決方案,在stackoverflow 上看到一個解決方案
    地址:https://stackoverflow.com/questions/45679847/android-studio-3-0-compile-issue-cannot-choose-between-configurations
    就是 compile project(path: ‘:alarmscene’, configuration: ‘default’)
    但是:這個解決方案慎用,我用了之後導致出現了其他的意想不到的bug(依賴庫中的jar包中的API不能使用了,這個問題研究了好久,最後把configuration: 'default’刪除掉纔好了,還是自己對gradle不夠了解)

  2. 再次編譯之後竟然好了,小項目上的問題果然少,在我的另一個大項目上還出現了一個問題:

Failed to transform file 'xxx.aar' to match attributes {artifactType=android-exploded-aar} using transform ExtractAarTransform

網上我看到有個同行是這麼說的:

這個問題也折騰了挺長時間的,實際上就是你的項目中有bug,導致你的那個想要的aar沒有生成,你可能想我之前沒bug呀,這也沒辦法,切換的時候會生成一些莫名其妙的bug。但是有bug你就提示bug吧,提示上面的問題就是google的不對了。好在在網上找到了2種解決方案,一種是把gradle版本降下去,這個雖然可以解決問題,但我不提倡,不能迴避問題嘛。第二種方案是清除緩存文件,將C:\Users\\.gradle\caches\transforms-1刪除,重新編譯項目,你的bug就暴露出來了,但是隻是一次,你再編譯又出現上面的錯誤提示了。所以,要先將暴露出來的bug解決掉了,(我開始就是以爲不是bug呢,結果再次編譯就不報哪個bug了,然後就陷入了死循環)。解決掉bug後再次編譯還可能會出現上面錯誤提示,那就是還有bug唄,再清緩存,再編譯,再解決bug,直到編譯通過。
  1. 我試了上面這種做法,發現還是無法解決不了上面的編譯錯誤。經過一番百度,終於找到了解決此問題的方法:https://www.jianshu.com/p/2c50305d7e21
    總結來說就是一句話:看看你的app的buildTypes節點是否和module中的buildTypes節點一致
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
        }
        product {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
            versionNameSuffix "${VERSION_NAME_SUFFIX}"
        }
        prerelease {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
            versionNameSuffix "${VERSION_NAME_SUFFIX}"
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
            versionNameSuffix "${VERSION_NAME_SUFFIX}"
        }
    }

以上是我app的build.gradle文件中buildTypes的四個節點。但是我的module只有release這一個節點,加上後,在編譯就OK了。

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        product {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        prerelease {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
  1. 從開始升級gradle,到徹底解決。整整花了2天時間,希望總結出來的對大家有用!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章