用Android Studio3.0新功能加快構(gòu)建速度
Android Studio3.0很多新的功能,他們可以直接加快Android Studio的構(gòu)建速度從而加快開(kāi)發(fā)效率,構(gòu)建速度直接影響到開(kāi)發(fā)效率,浪費(fèi)時(shí)間即浪費(fèi)生命,可以通過(guò)修改一些配置,優(yōu)化下構(gòu)建速度。
Android Studio3.0之前的做法
通過(guò)配置DEX 資源縮短構(gòu)建時(shí)間
gradle 添加以下代碼
android { ... dexOptions { maxProcessCount 4 // this is the default value javaMaxHeapSize "2g" } }
maxProcessCount
設(shè)置可以并行啟動(dòng)的 DEX 進(jìn)程的最大數(shù)量
javaMaxHeapSize 設(shè)置 dex 操作的最大內(nèi)存分配池大小
根據(jù)自己電腦的配置,設(shè)置這兩個(gè)值,通常情況下這兩個(gè)值越大越好
啟用 dexing-in-process 和增量 Java 編譯
Android Plugin for Gradle 版本 2.1.0 及更高版本還引入了其他的構(gòu)建流程改進(jìn),包括增量 Java 編譯和 dexing-in-process。增量 Java 編譯默認(rèn)情況下處于啟用狀態(tài),這種編譯方式僅對(duì)發(fā)生變化或需要重新編譯的源代碼部分進(jìn)行重新編譯,可以縮短開(kāi)發(fā)過(guò)程中的編譯時(shí)間。
dexing-in-process 在構(gòu)建流程而不是單獨(dú)的外部 VM 流程中執(zhí)行 dexing。這樣不僅可以讓增量構(gòu)建更快,也可以顯著提高完整構(gòu)建的速度。要啟用此功能,您需要將 Gradle 后臺(tái)進(jìn)程的最大堆大小設(shè)置為至少 2048 MB。要進(jìn)行設(shè)置,您可以將以下代碼包含到項(xiàng)目的 gradle.properties 文件中
org.gradle.jvmargs = -Xmx2048m
如果您已經(jīng)在模塊級(jí)別的 build.gradle 文件中為 javaMaxHeapSize 定義值,則需要將后臺(tái)進(jìn)程的最大堆大小設(shè)置為 javaMaxHeapSize 的值 + 1024 MB。例如,如果您已將 javaMaxHeapSize 設(shè)為“2g”,則需要將以下代碼添加到項(xiàng)目的 gradle.properties 文件中:
org.gradle.jvmargs = -Xmx3072m
3.0之后的做法
使用用D8 編譯器作為DEX 編譯器
Android Studio3.0 包含了一個(gè)新的可選擇DEX編譯器,叫做D8,不久它將替換掉舊的DX編譯器,現(xiàn)在可以選擇使用新的編譯器,DEX編譯直接影響到app的構(gòu)建時(shí)間,dex文件大小,和運(yùn)行時(shí)的性能,當(dāng)使用新的D8編譯器,D8編譯更快和輸出更小的.dex文件,并且相同或者更好的app運(yùn)行時(shí)性能。要想使用D8編譯器,把以下代碼添加到工程的gradle.properties 文件即可
android.enableD8=true
使用新的依賴(lài)方式
也就是指dependencies代碼塊的引用
dependencies{ compile project('xxx') compile 'com.github.bumptech.glide:glide:3.7.0' }
Android gradle 3.0 插件有4種引入方式
* implementation 相當(dāng)于原來(lái)的compile
* api 相當(dāng)于原來(lái)的compile
* compileOnly 相當(dāng)于原來(lái)的provided
* runtimeOnly 相當(dāng)于原來(lái)的apk
一般來(lái)說(shuō)實(shí)際中主要用到的是compile
為了提高構(gòu)建速度
替換成
implementation project('xxx') implementation 'com.github.bumptech.glide:glide:3.7.0'
api project('xxx') api 'com.github.bumptech.glide:glide:3.7.0'
那這兩者有什么區(qū)別呢
此時(shí)需要注意的一個(gè)地方,例如一個(gè)叫A的lib里面用implementation引用一個(gè)B庫(kù),又有一個(gè)C的module(不管是lib還是app)引用了A,這個(gè)C的module是引用了不了B的,也就是不能使用B庫(kù)里面的類(lèi)和方法。這也是為什么使用implemention會(huì)加快構(gòu)建速度的原因,可以減少重復(fù)編譯。要想引用B到的庫(kù),可以使用api。在3.0中,api用法可以完全可以替換之前的compile,不用擔(dān)心編譯問(wèn)題。
簡(jiǎn)單總結(jié)下:
implementation:C引用A,即使A庫(kù)implementation方式引用B,C也不會(huì)引用B
api :C引用A,并且A庫(kù)用api方式引用B,C會(huì)引用B
compileOnly 只依賴(lài)庫(kù)用來(lái)編譯,不會(huì)把庫(kù)打包進(jìn)apk,在一些特定的場(chǎng)景很有用
runtimeOnly 不用來(lái)編譯,但是會(huì)打包到apk,這個(gè)方式是deprecated(不推薦使用)的
參考
配置構(gòu)建
相關(guān)文章
利用Jetpack?Compose復(fù)刻游戲Flappy?Bird
Flappy?Bird是13年紅極一時(shí)的小游戲,其簡(jiǎn)單有趣的玩法和變態(tài)的難度形成了強(qiáng)烈反差,引發(fā)全球玩家競(jìng)相把玩!本文將通過(guò)Jetpack?Compose復(fù)刻這一游戲,感興趣的小伙伴可以了解一下2022-02-02Android AIDL——進(jìn)程通信機(jī)制詳解
這篇文章主要介紹了Android AIDL——進(jìn)程通信機(jī)制詳解的相關(guān)資料,并附簡(jiǎn)單實(shí)例,和實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-10-10Android開(kāi)發(fā)之splash界面下詳解及實(shí)例
這篇文章主要介紹了 Android開(kāi)發(fā)之splash界面下詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03Android開(kāi)發(fā)之permission動(dòng)態(tài)權(quán)限獲取詳解
這篇文章主要為大家詳細(xì)介紹了Android開(kāi)發(fā)之permission動(dòng)態(tài)權(quán)限獲取,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08基于Fedora14下自帶jdk1.6版本 安裝jdk1.7不識(shí)別的解決方法
本篇文章是對(duì)Fedora14下自帶jdk1.6版本,安裝jdk1.7不識(shí)別的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05android項(xiàng)目實(shí)現(xiàn)帶進(jìn)度條的系統(tǒng)通知欄消息
本篇文章主要介紹了android項(xiàng)目實(shí)現(xiàn)帶進(jìn)度條的系統(tǒng)通知欄消息,就是實(shí)現(xiàn)在通知欄看到下載進(jìn)度。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-10-10Android開(kāi)發(fā)實(shí)現(xiàn)的導(dǎo)出數(shù)據(jù)庫(kù)到Excel表格功能【附源碼下載】
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)的導(dǎo)出數(shù)據(jù)庫(kù)到Excel表格功能,涉及Android數(shù)據(jù)庫(kù)及Excel表格相關(guān)操作技巧,并附帶完整源碼供讀者下載參考,需要的朋友可以參考下2018-03-03