Android Gradle Plugin 3.6.0 (2020 二月)
這個(gè)版本的Android插件需要:
Gradle 5.6.4. 了解更多關(guān)于Gradle升級部分据某。
SDK Build Tools 28.0.3或者更高.
新功能
此版本的Android Gradle插件包含以下新功能奏窑。
View Binding
在代碼中引用視圖時(shí)蔓肯,View binging提供了編譯時(shí)安全性。現(xiàn)在可以用自動(dòng)生成的綁定類引用替換findViewById()。要開始使用View binding希柿,請?jiān)?lt;font color=red>每個(gè)模塊的build.gradle</font>文件中包含以下內(nèi)容:
android {
viewBinding.enabled = true
}
想了解更多, 請看View Binding文檔.
Maven Publish plugin 支持
Android Gradle插件包括對Maven Publish Gradle插件的支持旬陡,它允許您將構(gòu)建工件發(fā)布到apachemaven倉庫溶锭。Android Gradle插件為應(yīng)用程序或庫模塊中的每個(gè)構(gòu)建變體工件創(chuàng)建一個(gè)組件顽聂,您可以使用該組件將自定義發(fā)布到Maven倉庫唠椭。
要了解更多信息惜纸,請轉(zhuǎn)到有關(guān)如何使用Maven Publish插件的頁面叶撒。
新的默認(rèn)打包工具
在構(gòu)建應(yīng)用程序的調(diào)試版本時(shí),插件使用名為zipflinger的新打包工具來構(gòu)建APK耐版。這個(gè)新工具應(yīng)該可以提高構(gòu)建速度祠够。如果新的打包工具不能按預(yù)期工作,請報(bào)告一個(gè)錯(cuò)誤粪牲。要恢復(fù)舊的打包工具只需在gradle.properties文件中包含以下內(nèi)容古瓤,
android.useNewApkCreator=false
原生構(gòu)建屬性
現(xiàn)在可以確定Clang在項(xiàng)目中建立和鏈接每個(gè)C/C++文件所需的時(shí)間長度。Gradle可以輸出一個(gè)Chrome跟蹤腺阳,其中包含這些編譯器事件的時(shí)間戳湿滓,這樣您就可以更好地理解構(gòu)建項(xiàng)目所需的時(shí)間。要輸出此生成屬性文件舌狗,請執(zhí)行以下操作:
執(zhí)行Gradle構(gòu)建命令時(shí)添加屬性
-Pandroid.enableProfileJson=true
如:
gradlew assembleDebug -Pandroid.enableProfileJson=true
打開Chrome瀏覽器并輸入chrome://tracing
單擊加載按鈕并導(dǎo)航到project-root/build/android-profile以查找文件叽奥。文件名為profile-timestamp.json.gz。
您可以在查看器頂部附近看到本機(jī)生成屬性數(shù)據(jù):
習(xí)慣改變
使用此版本的插件時(shí)痛侍,可能會(huì)遇到以下行為的變化朝氓。
默認(rèn)NDK版本
如果您下載了多個(gè)版本的NDK,Android Gradle插件現(xiàn)在將選擇一個(gè)默認(rèn)版本來編譯源代碼文件主届。此前赵哲,插件選擇了NDK的最新下載版本。使用模塊build.gradle文件中的android.ndkVersion
屬性覆蓋所選插件的默認(rèn)值君丁。
簡化R類的生成
Android Gradle插件通過為項(xiàng)目中的每個(gè)庫模塊僅生成一個(gè)R類并與其他模塊依賴項(xiàng)共享這些R類枫夺,簡化了編譯類路徑。這種優(yōu)化應(yīng)該會(huì)導(dǎo)致更快的生成绘闷,但它要求您記住以下幾點(diǎn):
- 因?yàn)榫幾g器與上層模塊依賴項(xiàng)共享R類橡庞,所以項(xiàng)目中的每個(gè)模塊使用唯一的包名稱是很重要的
- 一個(gè)庫的R類對其他項(xiàng)目的可見依賴是由將該庫作為依賴項(xiàng)包含在內(nèi)的配置決定较坛。例如,如果庫A包含庫B作為“api”依賴項(xiàng)扒最,則庫A和其他依賴于庫A的庫可以訪問庫B的R類丑勤。但是,如果庫A使用實(shí)現(xiàn)依賴項(xiàng)配置吧趣,則其他庫可能無法訪問庫B的R類法竞。要了解更多信息,請閱讀依賴配置强挫。
移除默認(rèn)配置中的資源
對于庫模塊岔霸,如果包含的語言資源未包含在默認(rèn)資源集中(例如,如果將hello_world作為字符串資源包含在/values-es/strings.xml中俯渤,但未定義) /values/strings.xml中的資源-編譯項(xiàng)目時(shí)秉剑,Android Gradle插件不再包含該資源。 此行為更改應(yīng)導(dǎo)致更少的“找不到資源”運(yùn)行時(shí)異常稠诲,并提高了構(gòu)建速度侦鹏。
D8現(xiàn)在遵守CLASS注釋保留策略
現(xiàn)在在編譯你的應(yīng)用程序時(shí),D8會(huì)考慮注釋何時(shí)應(yīng)用CLASS保留策略臀叙,并且這些注釋在運(yùn)行時(shí)不再可用略水。 將應(yīng)用程序的Target SDK設(shè)置為API級別23時(shí),也會(huì)發(fā)生此行為劝萤,該行為以前允許在運(yùn)行時(shí)使用較舊版本的Android Gradle插件和D8編譯應(yīng)用程序時(shí)訪問這些批注渊涝。
其他變化
aaptOptions.noCompress
在所有平臺(tái)上都不再區(qū)分大小寫(對于APK和Bundle),并遵守使用大寫字符的路徑床嫌。默認(rèn)情況下跨释,數(shù)據(jù)綁定現(xiàn)在是增量的。要了解更多信息厌处,請參閱問題#110061530.
所有單元測試鳖谈,包括Roboelectric單元測試,現(xiàn)在都是完全可緩存的阔涉。要了解更多信息缆娃,請參閱問題#115873047.
已知問題
丟失Manifest類文件
如果您的應(yīng)用程序在其清單中定義了自定義權(quán)限,Android Gradle插件通常會(huì)以字符串常量的方式定義這些自定義權(quán)限并生成manifest.java類瑰排。插件將這個(gè)類與你的應(yīng)用程序打包在一起贯要,這樣你就可以更容易地在運(yùn)行時(shí)引用這些權(quán)限。
生成清單類在Android Gradle插件3.6.0中已損壞椭住。 如果使用此版本的插件構(gòu)建應(yīng)用程序崇渗,并且該應(yīng)用程序引用了清單類,則可能會(huì)看到ClassNotFoundException異常。 要解決此問題宅广,請執(zhí)行以下任一操作:
- 通過標(biāo)準(zhǔn)名稱引用您的自定義權(quán)限. 如:
"com.example.myapp.permission.DEADLY_ACTIVITY".
- 定義自己的常量葫掉,如下所示:
public final class CustomPermissions {
public static final class permission {
public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY";
}
附錄
版本更新對應(yīng)表
Plugin version | Required Gradle version |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1+ |
2.3.0+ | 3.3+ |
3.0.0+ | 4.1+ |
3.1.0+ | 4.4+ |
3.2.0 - 3.2.1 | 4.6+ |
3.3.0 - 3.3.2 | 4.10.1+ |
3.4.0 - 3.4.1 | 5.1.1+ |
3.5.0-3.5.3 | 5.4.1+ |
3.6.0+ | 5.6.4+ |