? 隨著沒我們的專案不斷地增大,模塊化、組件化,APT技術的盛行,導致module拆分過多,多module情況下很容易出現依賴關系混亂、過度依賴等問題,致使構建速度越來越慢,
? 本文針對自己的實際專案經驗總結了一些提升一些Android構建速度的方法:
開啟Gradle Daemon
Gradle 守護行程是一個后臺行程, 它運行著繁重的構建, 然后在構建等待下一次構建的之間保持自身存在. 這使得資料和代碼在下一次構建前已經準備好,并存入記憶體中,這顯著的提高了后續構建的性能. 啟用Gradle守護行程是一種節約構建時間的廉價方式,
強烈建議在所有開發機器上啟用Gradle的守護行程,但是不推薦在持續集成和構建服務器環境下啟用守護行程
Gradle自動管理守護行程.如果構建環境配置為利用后臺程式,如果在沒有可用守護行程,就會自動啟動一個守護行程,或者使用現有的空閑的兼容守護行程.如果一個守護行程在3個小時內沒有使用,它將會自我終結.一旦配置開發環境為使用的守護行程,守護行程通常是隱形的,容易被遺忘的.
開啟并行編譯
task默認是串行執行,開啟并行執行提高構建速度
org.gradle.parallel=true(在專案根目錄gradle.properties檔案中宣告)
調整java堆大小
gradle默認為構建預留1G的堆空間,但對于一個相對較大的app來說還遠遠不夠,可通過
org.gradle.jvmargs=-Xmx4096M(在專案根目錄gradle.properties檔案中宣告)配置動態調整,可根據自身設備配置來進行調整,
開啟build快取
org.gradle.caching=true
開啟編譯快取
android.enableBuildCache=true
開啟后臺行程
org.gradle.daemon=true,此選項默認3.0以后自動開啟
減少參考倉庫的數量
gradle會從用戶配置的repositories中順序的查找并下載依賴庫,build程序dependency resolution階段會執行此操作,它需要訪問網路,因此合理配置repositories可減少依賴庫查找時間
合理的apply插件
應用的插件到底是全域的還是區域的,
應該配置到合理的位置,allprojects {} or subprojects {},不必要的插件不要apply,
盡量不要使用動態的版本號
(Minimize dynamic and snapshot versions),例如“2.+”,它會迫使gradle訪問遠程倉庫判斷是否有新版本可用,
第三方庫盡量參考相同版本
gradle會自動為我們解決各種第三方庫的版本依賴問題,如果存在過度的版本不一致的問題也會變相增加gradle的作業量
開啟R8
R8是新一代的代碼壓縮工具,它的職能與Proguard相對應,在R8之前,gradle采用D8+Proguard的形式構建,R8則將混淆和D8工具整合(D8編譯器在gradle 3.1版本默認開啟),旨在加快構建時間和output apk大小
開啟方式:
android.enableR8 = false
開啟按需配置
配置有一種方式是按需配置,目前還在試驗范訓階段,所以默認是關閉的,可以通過在gradle.properties加入這樣一句來開啟
org.gradle.configureondemand=true
減少編譯腳本中的I/O操作
有時候,編譯腳本中會有一些代碼做動態配置資訊的獲取,很多時候其實不需要每次搜需要去獲取,可以使用快取或者使用腳本控制與打包機進行區分,日常開發除錯是不需要實時獲取配置資訊
開啟kotlin的增量和并行編譯
如果專案開發程序中有部分模塊使用到了kotlin我們需要對其編譯進行優化
kotlin.incremental=true kotlin.incremental.java=true kotlin.incremental.js=true kotlin.caching.enabled=true kotlin.parallel.tasks.in.project=true *//開啟kotlin并行編譯*
優化kapt
kapt.use.worker.api=true //并行運行kapt1.2.60版本以上支持 kapt.incremental.apt=true //增量編譯 kapt1.3.30版本以上支持 //kapt avoiding 如果用kapt依賴的內容沒有變化,會完全重用編譯內容,省掉最上圖中的:app:kaptGenerateStubsDebugKotlin的時間 kapt.include.compile.classpath=false
開啟KAPT 編譯快取
在專案的app目錄中的build.gradle檔案中修改
kapt { useBuildCache = true javacOptions { option("-Xmaxerrs", 500) } }
手動配置maxProcessCount
在專案的app目錄中的build.gradle檔案中修改
android { dexOptions { preDexLibraries true maxProcessCount 8 } }
合理的apply插件
應用的插件到底是全域的還是區域的,
應該配置到合理的位置,allprojects {} or subprojects {},不必要的插件不要apply,
Build Scans工具介紹
我們在進行優化的時候,主要監測工具可以使用Build Scans,Build Scans是用于開發和維護Gradle構建的重要工具,它為你提供了構建的詳細資訊,并為你識別構建環境、依賴或性能上存在的問題,同時可以幫你更全面地理解并提升構建程序,也便于與他人的合作,
在Gradle構建運行時,Build Scans插件會抓取資料,并將資料傳送到Build Scans服務端,同時回傳一個可被共享的鏈接,內部包含有用的構建資訊,這些資訊包含兩大類:*(1)環境資訊,包括作業系統、Java版本和時區;(2)構建相關資訊,包含使用的插件、任務、測驗以及依賴資訊,
build scans 主界面:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/305721.html
標籤:其他
