一沿癞、必要性
android build-tools升級到31.0.0(S)后,會強制要求升級到gradle7,否則無法編譯匆帚。gradle7廢棄了大量的api,增加了更嚴格的安全限制旁钧,導致適配難度較大吸重。
使用gradle7:
在gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
然后修改gradle-build版本7.0.0+
prop_gradleVersion=7.0.3
二互拾、適配
2.1 maven適配
gradle7不推薦使用http協(xié)議,內(nèi)部的maven不支持https嚎幸,添加以下配置即可
maven {
// 允許使用http協(xié)議
allowInsecureProtocol = true
url mavenUrlRelease
}
2.1.1 PC maven適配
PC maven如果是原來的方式颜矿,還是會查找http的倉庫,需要修改如下:
在settings.gradle中:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven {
allowInsecureProtocol = true
url mavenUrlRelease
}
}
}
之后刪除根build.gradle的allprojects配置
2.2 gradle插件適配
說明:如果是其他插件編譯報錯嫉晶,嘗試更新到最新版本
gradle7對增量編譯更嚴格骑疆,要求所有的插件都具備增量編譯的功能。所有的屬性替废,都必須添加注解的封断。
適配方法:
- 添加static,變成靜態(tài)常量
- 添加 @Internal注解舶担,跳過檢測坡疼,但是會導致增量編譯效果不佳。
- 添加 @Input注解衣陶,表示是輸入文件夾
- 詳情:https://cloud.tencent.com/developer/article/1787558
2.3 JDK適配
gradle7強制要求使用java11,本地需要修改用JDK為Java11柄瑰;
2.4 其他問題記錄
2.4.1 res沒壓縮,導致apk增大剪况,或者res文件被混淆了
在gradle.properties
# Ensure that resources in `res` are not optimization
android.enableResourceOptimizations=false
2.4.2 so沒壓縮教沾,導致apk增大
<application
android:extractNativeLibs="true">
2.4.3 dex沒壓縮
<application
android:useEmbeddedDex ="false">
在android標簽內(nèi)
//需要android標簽內(nèi)
packagingOptions {
dex {
useLegacyPackaging = true
}
}
2.4.4新版android studio,沒有g(shù)radle任務(wù)了
新版默認不創(chuàng)建任務(wù)译断,提高構(gòu)建性能授翻,可以通過以下方式開啟。開啟后會導致sync變慢 Settings->Experimental-Gradle-Do not build Gradle tasks list during Grade snc
2.4.5“manifest merger failed with multiple errors see logs”
升級版本:
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
2.4.6 android:exported needs to be explicitly specified for <activity>
使用Action的activity堪唐、service翎蹈、Broadcast等必須聲明exported