Android Studio升級3.0及以上版本後,升級gradle版本引發的問題,最全解決方案
- 我的電腦升級到的版本是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
-
上網搜索了一下解決方案,在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不夠了解) -
再次編譯之後竟然好了,小項目上的問題果然少,在我的另一個大項目上還出現了一個問題:
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,直到編譯通過。 |
- 我試了上面這種做法,發現還是無法解決不了上面的編譯錯誤。經過一番百度,終於找到了解決此問題的方法: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'
}
}
- 從開始升級gradle,到徹底解決。整整花了2天時間,希望總結出來的對大家有用!