Android Gradle Plugin 3.6.0更新

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):

  1. 因?yàn)榫幾g器與上層模塊依賴項(xiàng)共享R類橡庞,所以項(xiàng)目中的每個(gè)模塊使用唯一的包名稱是很重要的
  2. 一個(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+
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乘碑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌金拒,老刑警劉巖兽肤,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绪抛,居然都是意外死亡资铡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門幢码,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笤休,“玉大人,你說我怎么就攤上這事症副〉暄牛” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵贞铣,是天一觀的道長闹啦。 經(jīng)常有香客問我,道長辕坝,這世上最難降的妖魔是什么窍奋? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮酱畅,結(jié)果婚禮上琳袄,老公的妹妹穿的比我還像新娘。我一直安慰自己纺酸,他們只是感情好窖逗,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著餐蔬,像睡著了一般滑负。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上用含,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天矮慕,我揣著相機(jī)與錄音,去河邊找鬼啄骇。 笑死痴鳄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缸夹。 我是一名探鬼主播痪寻,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼螺句,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了橡类?” 一聲冷哼從身側(cè)響起蛇尚,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顾画,沒想到半個(gè)月后取劫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡研侣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年谱邪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庶诡。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惦银,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出末誓,到底是詐尸還是另有隱情扯俱,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布喇澡,位于F島的核電站蘸吓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撩幽。R本人自食惡果不足惜库继,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窜醉。 院中可真熱鬧宪萄,春花似錦、人聲如沸榨惰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琅催。三九已至居凶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藤抡,已是汗流浹背侠碧。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缠黍,地道東北人弄兜。 一個(gè)月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親替饿。 傳聞我的和親對象是個(gè)殘疾皇子语泽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容