首先是AndroidStudio可以做一些相應的配置
https://blog.csdn.net/yoonerloop/article/details/78872334
然鵝裏面只是一小部分,
接下來更改studio的VM大小
Android Studio限制了Java虛擬機啓動的內存大小,限制了最大堆內存,當Android Studio運行越久,內存越不足的時候,就會頻繁的觸發GC,Android Studio就自然會卡起來了,嚴重的直接黑屏,所以,我們把對應的所需內存都配置大一些,32位的系統打開studio.exe.vmoptions文件,如果是64位的話打開studio64.exe.vmoptions,改動以下配置,根據各自配置適當調節。
-Xms1024m
-Xmx4096m
-XX:MaxPermSize=2048m
-XX:ReservedCodeCacheSize=1024m
優化配置:
1、gradle運行相關的配置 (gradle.properties文件中)
# 編譯時使用守護進程
org.gradle.daemon=true
#JVM最大允許分配的堆內存,按需分配
org.gradle.jvmargs=-Xmx16896m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#使用並行編譯
org.gradle.parallel=true
org.gradle.configureondemand=true
#啓用新一代Dex編譯器D8
android.enableD8=true
#啓用gradle緩存
org.gradle.caching=true
2、啓用新一代Dex編譯器D8 (gradle.properties文件中)
android.enableD8=true
3、啓用新一代資源編譯器aapt2 (增量資源處理) (gradle.properties文件中)
android.enableAapt2=true
4、啓用構建緩存 (gradle.properties文件中)【如果工程是從2.2之前的版本升級上來的】
Build Cache: 2.2版本的時候,加入了編譯緩存的功能。但是2.3正式版之前都是默認關閉的。你可以通過 android.enableBuildCache = true
來開啓這個功能。
2.3正式版開始將此功能轉成默認開啓的狀態。
爲了不受版本更替的影響, 直接在項目根目錄下的gradle.properties文件中添加下列配置:
#啓用並設置 構建緩存 的目錄 (使用 `./gradlew cleanBuildCache` 指令清除cache內容)
android.enableBuildCache=true
android.buildCacheDir=buildCacheDir/
Build Cache默認的存儲目錄~/.android/build-cache. 爲了方便管理(如, 緩存過多時手動清除), 上述配置的第二行就自己指定了緩存的存儲目錄
關於更多Build Cache的內容請參考官方說明: https://developer.android.com/studio/build/build-cache.html
如果無法訪問請看這裏: https://developer.android.google.cn/studio/build/build-cache.html
5、啓用gradle緩存 (gradle.properties文件中)
org.gradle.caching=true
6、禁用PNG圖片優化處理 (禁止Png Cruncher優化)
a. 在Root Project的build.gradle文件中添加下面一個函數, 來判斷是否是打debug包, 如下:
//是否是執行Debug相關task (通用函數, 可供子module調用)
def isDebug() {
def taskNames = gradle.startParameter.taskNames
for (tn in taskNames) {
if( (tn.contains("install") || tn.contains("assemble")) && tn.contains("Debug")) {
return true
}
}
return false
}
b. 在主module的build.gradle文件中的android {}塊中添加下面配置:
android {
// 其他配置省略 ...
//如果是構建debug包, 則禁用 "png cruncher" (默認cruncherEnabled=true, 禁用以加速構建)
def enableCruncher = { ->
return !isDebug()
}
aaptOptions { //禁用cruncher, 以加速編譯
cruncherEnabled = enableCruncher()
cruncherProcesses = 0
}
}
7、Dex配置項優化
在主module的build.gradle的android {}語句塊中添加下面配置項目:
android {
// 其他配置省略 ...
dexOptions { //優化dex配置
dexInProcess true
preDexLibraries true
javaMaxHeapSize "2g"(越大越好)
}
}
8、其他配置項
在主module中的buildg.gradle文件中添加如下配置:
android {
compileOptions {
incremental = true //開啓增量編譯
//其他代碼省略 ...
}
buildTypes {
debug {
crunchPngs false //關閉crunchPng優化, 以加快構建
//其他代碼省略 ...
}
}
//其他代碼省略 ...
}
9、跳過Tests和Lint相關的Task
在主module的build.gradle文件中的android {}代碼塊中添加下面代碼:
android {
//其他代碼省略 ...
//跳過Lint和Test相關的task, 以加速編譯
if (isDebug()) {
gradle.taskGraph.whenReady {
tasks.each { task ->
if (task.name.contains("Test") || task.name.contains("Lint")) {
task.enabled = false
}
}
}
}
}
10、Dex的merge過程優化 (API Level 21, 即安卓5.0的優化配置)
隨着代碼的日益積累, 我們安卓項目中的方法數目很容易就超過64K了, 這時候就需要分包, 即MultDex操作 (爲什麼方法數不能超過64K呢? 什麼又是MultDex? 這些就說來話長了, 如果你還不瞭解這些, 請移步此處: https://developer.android.com/studio/build/multidex.html#about)
MultiDex主要是爲了解決64K限制. Google給出的MultiDex解決方案分爲兩個階段:
a. Android 5.0之前使用 Dalvik可執行文件分包支持庫 來支持分包
b. Android 5.0即Android 5.0之後的版本內置支持MultiDex操作 (因此就不需要額外的支持庫啦, 只需要在gradle中簡單的配置一下)
兩種方法都會把dex分成多個, 但是前一分的dex更少, 內置的分包分的dex非常多. 下面是兩種分包方式打的包的dex切分情況:
minSdkVersion小於21時構建出來的apk包的dex切分情況如下:
minSdkVersion大於等於21時構建出來的apk包的dex切分情況如下:
具體優化邏輯就是:
如果不需要進行優, 則把minSdkVersion配成正常的支持版本(如14, 15 等); 而如果需要優化, 則把minSdkVersion配置成21(或大於21)
具體配置如下:
/**
* 默認構建會進行優化, 如果不需要優化, 則運行下列命令:
* ./gradlew assembleDebug -Pso=1
* 或者 (構建並安裝)
* ./gradlew installDebug -Pso=1
*/
def getMinSdkVersion() {
int is_skip_optimize = hasProperty("so") ? Integer.parseInt(so) : 0
//如果跳過優化 或 Release版本, 則minSdkVersion使用15; 否則使用21以便加快構建速度
if(is_skip_optimize == 1 || !isDebug()) {
return 15
} else {
return 21
}
}
android {
defaultConfig {
applicationId "com.stone.xxx"
minSdkVersion getMinSdkVersion() //此處的設置導致: 根據打包時傳入的參數決定是否進行優化
//其他配置省略 ...
}
}
兩種分包方式的具體配置請參考: https://developer.android.com/studio/build/multidex.html
11、Fabric相關優化
在Main Module的build.gradle中添加下面Fabric相關的代碼來優化Fabric配置:
def getMinSdkVersion() {
int is_skip_optimize = hasProperty("so") ? Integer.parseInt(so) : 0
//如果跳過優化 或 Release版本, 則minSdkVersion使用15; 否則使用21以便加快構建速度
if(is_skip_optimize == 1 || !isDebug()) {
return 15
} else {
return 21
}
}
android {
buildTypes {
debug {
crunchPngs false //關閉crunchPng優化, 以加快構建
ext.alwaysUpdateBuildId = false
// enableCrashlytics = true 會影響編譯速度 (enableCrashlytics默認值爲true)
// https://developer.android.com/studio/build/optimize-your-build.html#profile
if (getMinSdkVersion() == 21) {
ext.enableCrashlytics = false
buildConfigField "boolean", "USER_FABRIC", "false" //此變量用於是否初始化或調用Fabric
} else {
buildConfigField "boolean", "USER_FABRIC", "true" //此變量用於是否初始化或調用Fabric
}
}
}
//其他配置省略 ...
}
android官網給出的優化Fabric的配置如下:
官網優化相關配置:
https://developer.android.com/studio/build/optimize-your-build.html#profile
References
https://docs.fabric.io/android/crashlytics/build-tools.html
https://developer.android.com/studio/build/optimize-your-build.html#profile
https://developer.android.com/studio/build/multidex.html
https://developer.android.google.cn/studio/build/build-cache.html
https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties
https://developer.android.google.cn/studio/releases/index.html#preview-the-new-d8-dex-compiler
https://developer.android.com/studio/releases/gradle-plugin.html#optimizations
http://blog.csdn.net/ahence/article/details/73603326
https://blog.csdn.net/walkeryudev/article/details/80360422
最後,加速Android Studio另一個最簡單的方法就是:
升級你的電腦配置!