[譯]如何提升Android項目的構建速度

翻譯說明:

原標題: How to improve the build speed of your Android projects

原文地址: www.freecodecamp.org

原文做者: Prateek Phoenix

最近,我承擔了將 Kure 的 Android 代碼庫遷移到 AndroidX 的任務。這彷佛是嘗試和修復項目構建速度的絕佳機會。Gradle,因爲速度緩慢且資源密集,老是有一個糟糕的表明,但我很驚訝項目的構建配置的微小變化能夠大大提升構建速度。html

爲了讓你瞭解我從乾淨的構建中脫離的時間,這裏是構建掃描的先後指標。android

預優化
預優化🐢🐢

後優化⚡️⚡️

從5.5分鐘降低到17秒?太瘋狂了。bash

經過優化能夠輕鬆實現,便可進一步縮短構建時間。可是爲了保持這篇文章的初學友好,我將故意專一於爲接近這個指標而採起的輕微,無痛的措施。app

但首先!

在開始優化以前,重要的是對咱們的項目進行基準測試,看看它目前須要多長時間才能構建。Gradle 有一個方便的掃描選項,你可使用它來分析任務的性能。在 Android Studio 上啓動終端並執行如下命令:jvm

./gradlew assembleDebug --scan
複製代碼

構建成功完成後,它將提示你接受服務條款以上載構建掃描結果。輸入 yes 繼續。完成發佈後,你將在終端上得到一個連接以檢查構建掃描。打開連接。工具

網站上有不少選項,但爲了簡潔起見,咱們只會看一下最重要的內容。post

摘要 視圖顯示已運行任務的摘要以及完成這些任務所需的時間。但咱們在這裏感興趣的是性能部分。它爲你提供了整體構建時間的更詳細分類,以下所示。性能

在性能部分下,有一個**「設置和建議」**選項卡,能夠爲你提供有關如何提升構建速度的建議。咱們來看看吧。測試

第1步:更新你的工具

Android 團隊不斷改進和發展 Android 構建系統。所以,大多數狀況下,只需採用最新版本的工具便可得到重大改進。gradle

在這個重構時,咱們的項目是在 Android Studio 的 Gradle 插件版本3.2.1 (比最新版本早幾個版本)。

你能夠訪問此連接以獲取最新版本的 Gradle 插件的版本。

在撰寫本文時,最新版本剛好是版本3.4.0。

但它伴隨着咱們須要記住之後的問題:

developer.android.com/studio/rele…

使用 Gradle 5.0 及更高版本時,咱們須要顯式增長堆大小以確保咱們的構建速度不會惡化。咱們將在一分鐘內回到這一點。

打開你將在項目根目錄中找到的頂級 build.gradle 文件,並在 dependencies 部分中添加如下行:

classpath 'com.android.tools.build:gradle:3.4.0'
複製代碼

你還須要更新位於 gradle/wrapper/gradle-wrapper.properties 的 gradle 包裝器屬性文件中的分發 URL 。將 URL 更新爲如下內容。(此連接將在Android Gradle插件發佈頁面上提供。)

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
複製代碼

若是你在項目中使用 Kotlin,若是你的 Kotlin Gradle 插件的版本低於1.3.0,則會遇到錯誤。若是是這種狀況,請使用 IDE 的提示將你的 Kotlin Gradle 插件更新到最新版本(在撰寫本文時剛好是版本1.3.31)。

好吧,讓咱們再次從終端運行構建,看看咱們是否實現了任何改進。

步驟2:更新配置

因此咱們可以從構建時間開始大約2.5分鐘,但仍然不夠好。在調查終端中的構建日誌後,我遇到了一條咱們感興趣的行:

增量編譯基本上能夠防止浪費地編譯整個源文件集,而只編譯已更改的文件。查看日誌,很明顯咱們沒有利用此功能。它建議咱們使用 android.enableSeparateAnnotationProcessing = true,但因爲咱們在項目中使用 Kotlin,咱們不該該使用 'annotationProcessor' 配置。

幸運的是,Kotlin 版本1.3.30增長了對增量註釋處理的支持。

kotlinlang.org/docs/refere…

那麼咱們

  1. 將 annotationProcessor 配置更改成 kapt
  2. 啓用增量註釋處理實驗標誌

打開模塊級 build.gradle 文件,並將如下行添加到文件頂部:

apply plugin: 'kotlin-kapt'
複製代碼

接下來,更改依賴項部分中的全部 annotationProcessor 配置以使用 kapt。這是一個例子:

//Before
annotationProcessor 'com.google.dagger:dagger-compiler:2.9'

//After
kapt 'com.google.dagger:dagger-compiler:2.9'
複製代碼

如今打開位於項目根目錄的 gradle.properties 文件,並添加如下行:

kapt.incremental.apt=true
複製代碼

讓咱們再次運行構建。🤞🏼🤞🏼🤞🏼

好吧,看起來咱們到了那裏。

第3步:Gradle 屬性

咱們如今處於最後階段。還記得咱們在更新 Gradle 插件版本時遇到的問題嗎?結果是較新版本的 Gradle 將堆大小減少到512 MB。這是爲了確保低端機器不會窒息。我在16臺機器上,因此我能夠給 Gradle 守護進程提供2-3gig,但你的里程可能會有所不一樣。

打開位於項目根目錄的 gradle.properties 文件,而後添加如下行。請記住根據您的要求和機器規格選擇尺寸。

org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
複製代碼

雖然咱們在這裏,但咱們還能夠在屬性中啓用並行構建和按需配置。

這是個人最終 gradle.properties 文件的樣子:

org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

org.gradle.parallel=true

org.gradle.configureondemand=true

kapt.incremental.apt=true
複製代碼
  • org.gradle.parallel - 此標誌容許 Gradle 並行而不是按順序在項目中構建模塊。這僅對多模塊項目有益。
  • org.gradle.configureondemand - 此標誌僅配置項目所需的模塊,而不是構建全部模塊。

有了這些,讓咱們看看咱們的構建速度指標:

這毫不是對能夠優化項目構建速度的全部方法的普遍報道。還有不少其餘的東西我沒有在這篇文章中討論,例如在使用 MultiDex 時使用 minSdk 21,預先解析你的庫,禁用 PNG 運算等等 - 僅舉幾例。

可是大多數這些配置都須要更深刻地瞭解Android的構建系統以及處理大型多模塊項目的經驗(這些項目的好處最明顯)。我上面提到的步驟很容易被一個項目歸入項目,即便是初級開發人員,也有很大的收益。我但願這能夠幫助你減小你的構建速度!

好吧,直到下一次,優秀!✌🏼

歡迎關注 Kotlin 中文社區!

中文官網:www.kotlincn.net/

中文官方博客:www.kotliner.cn/

公衆號:Kotlin

知乎專欄:Kotlin

CSDN:Kotlin中文社區

掘金:Kotlin中文社區

簡書:Kotlin中文社區

相關文章
相關標籤/搜索