優(yōu)化Gradle提升Gradle編譯速度
一. 我們先說一下提升Gralde編譯速度. 針對(duì)這個(gè)問題, 先講一下配置相關(guān)設(shè)置提升編譯速度.
- 我發(fā)現(xiàn)在build.gradle文件中如果設(shè)置了很多渠道, 在編譯時(shí)會(huì)影響編譯速度, 尤其是windows系統(tǒng)下運(yùn)行。
- 對(duì)gradle中渠道進(jìn)行優(yōu)化, 可以提升編譯速度
1. 在user/.gradle文件下創(chuàng)建gradle.properties文件, 并在中寫上org.gradle.daemon=true , 保存.
2. 設(shè)置studio, 打開setting >> gradle>> 勾選offine work; 打開離線編譯;如下圖:
3.設(shè)置JAVa虛擬機(jī)的運(yùn)行內(nèi)存等
在項(xiàng)目的根目錄中找到gradle.properties文件, 位置如下圖, 并設(shè)置相關(guān)參數(shù), 這一項(xiàng)設(shè)置在網(wǎng)上很多人提到, 我就不多說了。
但是有一點(diǎn)值得注意的是, 不能將java最大的運(yùn)行內(nèi)存設(shè)置過高, 否則會(huì)引起第二次啟動(dòng)時(shí)啟動(dòng)不了, 會(huì)報(bào)內(nèi)存不足。
4. 硬件提升
這個(gè)根據(jù)自己的情況而定。 如果可能的話, 建議使用臺(tái)試機(jī), 擴(kuò)展性強(qiáng)。
我給大家推薦一下配置吧:
4.1 使用雙路主板,配置兩顆CPU, 可以使用工作站的, 也可以用服務(wù)器的, 建議考慮工作站的。 現(xiàn)在市場(chǎng)上有超微的, 華碩, 技嘉等等都雙路工作站主板
4.2 使用NVME 固態(tài)硬盤。 例如三星p961, 可以通過PCI-E轉(zhuǎn)nvme 轉(zhuǎn)接卡, 將硬盤安裝到主板的PCI-E插槽上, 峰值速度達(dá)到2000M/s,這可不是一般的sata固態(tài)硬盤所能達(dá)到的速度。
注意:這種硬盤并不支持win7系統(tǒng), 需要win8.1 win10系統(tǒng)才能識(shí)別。
4.3 選用多條內(nèi)存。 上面推薦使用了雙路主板, 最新該類型主板支持ddr4內(nèi)存, 且共有八通道,使用4*8 = 32 G配置,可以將內(nèi)存性能發(fā)揮至極至。
5. 優(yōu)化gradle中的渠道配置
這是我所講的重點(diǎn), 如果對(duì)您有幫助,請(qǐng)注意看
在build.gradle 檢查渠道數(shù)量, 如下圖:
備注:在網(wǎng)上有很多貼子寫到變種productFlavors,讓buildtype與productFlavors結(jié)合使用, 達(dá)到不同版本不同渠道配置不同的參數(shù), 依賴的libs也進(jìn)行相關(guān)設(shè)置的編譯。 例如app依賴了Alibs, 并且需要Alibs能夠識(shí)別buildtype, 在app選擇測(cè)試版時(shí), Alibs也編譯了它的debug中參數(shù)。。
通過多次實(shí)踐發(fā)現(xiàn), 這種變種flavors, 會(huì)導(dǎo)致編譯速度變慢, 尤其是渠道較多時(shí),這種
渠道名BuildTypeCompile project(path:':libs名字',configuration:'渠道名BuildType')
- 例: huaweiDebugCompile project(path: ':banner', configuration: 'huaweiDebugCompile')
這種會(huì)使編譯速度更慢。 所以不推薦這種實(shí)現(xiàn)方式, 如果遇到這種需求,請(qǐng)嘗試其它方法解決。
言歸正轉(zhuǎn) 優(yōu)化Gradle
- 條件:在有較多渠道時(shí), 進(jìn)行渠道優(yōu)化。
- 目的:提升gradle編譯速度
- 思路: 由于我們?cè)诖蚨嗲腊鼤r(shí), 只有在發(fā)版時(shí)才會(huì)打,平時(shí)測(cè)試時(shí)我們并不需要打多個(gè)渠道的包,只會(huì)生成測(cè)試版, 線上版,預(yù)發(fā)布版本等等。 所以我們可以在gralde中設(shè)置一個(gè)boolean型全局常量,通過該常量判斷我們是否需要打渠道包。 在測(cè)試時(shí) , 我們可以只設(shè)置一個(gè)渠道, 在上線打包時(shí), 將所有渠道開放。 這樣, 在我們平時(shí)寫程序時(shí), 就可以提升編譯速度, 在打渠道時(shí), 就讓它靜靜地打包。
步驟一: 設(shè)置全局變量
方法一:可以設(shè)置項(xiàng)目的全局變量。 在項(xiàng)目根目錄下的build.gralde中的
allprojects
下添加ext{...}
我添加了三個(gè)常量, 因?yàn)槲业陌姹拘枰蛉齻€(gè)不同名字的應(yīng)用。如果您的項(xiàng)目中沒有該需求,只需設(shè)置一個(gè)就行了
ext { isHtgPack = false isOasPack = false isGeniusPack = false }
方法二: 在渠道所在build.gradle
中配置常量。 添加ext{...}
注意:
1.根據(jù)gradle語法, 常量需要在調(diào)用前聲明。
2.設(shè)置常量時(shí)不能用def boolean 等修飾 ;它會(huì)自動(dòng)識(shí)別它的數(shù)據(jù)類型;
步驟二: 代碼設(shè)置渠道
gradle是基于java, 所以它的很多語法和java一致,對(duì)寫android的哥們更易上手
在android {}中設(shè)置渠道, 添加 一行代碼。將渠道
if(isHtgPack) { //打包時(shí)需的渠道(所有渠道) 。。 productFlavors { huawei {} 360 {} ... } }else { //只配置一個(gè)渠道 productFlavors{ textFlavors{} } }
在需要打包時(shí)將常量的值更改一下就好了,將false更改為true就好了。
這樣就巧秒地避開了需要編譯很多渠道了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- spring boot使用sonarqube來檢查技術(shù)債務(wù)
- 使用Sonarqube掃描Javascript代碼的示例
- Android Studio Gradle插件版本與Gradle版本之間的對(duì)應(yīng)關(guān)系
- Spring Boot配置Thymeleaf(gradle)的簡(jiǎn)單使用
- Spring Boot使用Thymeleaf + Gradle構(gòu)建war到Tomcat
- Android中的build.gradle文件深入講解
- 關(guān)于gradle你應(yīng)該知道的一些小事
- Android gradle插件打印時(shí)間戳的方法詳解
- 給Android初學(xué)者的Gradle知識(shí)普及
- Gradle進(jìn)階使用結(jié)合Sonarqube進(jìn)行代碼審查的方法
相關(guān)文章
Android性能優(yōu)化之利用Rxlifecycle解決RxJava內(nèi)存泄漏詳解
RxJava作為一種響應(yīng)式編程框架,是目前編程界網(wǎng)紅,可謂是家喻戶曉,其簡(jiǎn)潔的編碼風(fēng)格、易用易讀的鏈?zhǔn)椒椒ㄕ{(diào)用、強(qiáng)大的異步支持等使得RxJava被廣泛使用。2017-01-01Android幀式布局實(shí)現(xiàn)自動(dòng)切換顏色
這篇文章主要為大家詳細(xì)介紹了Android幀式布局實(shí)現(xiàn)自動(dòng)切換顏色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Android 中構(gòu)建快速可靠的 UI 測(cè)試
本文主要介紹Android 中構(gòu)建快速可靠的 UI 測(cè)試,這里整理了相關(guān)資料及相關(guān)代碼,有興趣的小伙伴可以參考下2016-08-08Android Animation實(shí)戰(zhàn)之一個(gè)APP的ListView的動(dòng)畫效果
這篇文章主要介紹了Android Animation實(shí)戰(zhàn)項(xiàng)目,為大家分享了一個(gè)APP的ListView的動(dòng)畫效果,感興趣的小伙伴們可以參考一下2016-01-01安卓應(yīng)用開發(fā)通過java調(diào)用c++ jni的圖文使用方法
這篇文章主要介紹了2013-11-11Android基于AudioManager、PhoneStateListener實(shí)現(xiàn)設(shè)置黑名單功能
這篇文章主要介紹了Android基于AudioManager、PhoneStateListener實(shí)現(xiàn)設(shè)置黑名單功能的方法,涉及Android操作手機(jī)通信錄及通話模式與手機(jī)狀態(tài)的相關(guān)技巧,需要的朋友可以參考下2016-01-01Android百度地圖定位后獲取周邊位置的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android百度地圖定位后獲取周邊位置的實(shí)現(xiàn)代碼,準(zhǔn)確獲取周邊地理位置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01Android開發(fā)教程之如何屏蔽View的重復(fù)點(diǎn)擊
這篇文章主要給大家介紹了關(guān)于Android開發(fā)教程之如何屏蔽View的重復(fù)點(diǎn)擊的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09