一、分析Gradle建構慢的原因
1.配置Gradle建構報表
File --> Settings --> Build,Execution,Deployment --> Compiler
修改 Command-line Options:内容,追加
--profile
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcukTYkRTNzMWNiFDZidzMyMTYiNDZwEDNjBDO2Q2Y4EWMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
2.檢視生成的gradle建構報表
Sync Project
,
build
run
Make project
...
之後會在 Project的 build下,生成 reports檔案夾。用浏覽器打開profile.html即可檢視
二、解決Gradle建構慢的方法
在gradle開始優化之前先記錄下沒經過優化的build時間。*Build > Clean Project
1.開啟gradle單獨的守護程序
1.在下面目錄下面建立
gradle.properties
檔案:
C:\Users\<username>\.gradle(windows)
2.在檔案中添加:
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
這樣配置是對此計算機的studio使用者,是以對于所有項目都有效
2.設定 Gradle offline
File > Settings > Offline work 打勾,如下:
3.開發使用 SDK=21
android {
...
productFlavors {
dev {
minSdkVersion 21
}
release {
minSdkVersion 14
}
}
}
當API 不小于21,使用 ART,在 Build 時隻做 class to dex,不做 mergeing dex,會省下大量的時間。
4.引入依賴時使用 aar
連接配接遠端倉庫網絡不好時候可以引入自己私有的maven倉庫,或者一些國内的maven倉庫。
用網上第三方的依賴庫時盡量使用 aar ,自己的庫子產品也可以打包成aar。加快編譯速度。
build.gradle
檔案(主工程的Top-level)
apply from:"config.gradle"//可以給所有的module引入一個配置檔案
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()//引入遠端倉庫
maven { url MAVEN_URL }//引入自己的私有maven倉庫
}
}
gradle.properties(全局配置檔案)
# This can really make a significant difference if you are building a very complex project with many sub-module dependencies:
#sub-module并行建構
org.gradle.parallel=true
#背景程序建構
org.gradle.daemon=true
#私有maven倉庫位址
MAVEN_URL= http://xxx.xx.1.147:8081/nexus/content/repositories/thirdparty/
build.gradle(Module)
apply plugin: 'com.android.application'//插件 決定是apk\aar\jar等
android {
compileSdkVersion 23
buildToolsVersion "24.0.0"
// 此處注釋保持預設打開,關閉後可使不嚴格的圖檔可以通過編譯,但會導緻apk包變大
//aaptOptions.cruncherEnabled = false
//aaptOptions.useNewCruncher = false
packagingOptions {
exclude 'META-INF/NOTICE.txt'// 這裡是具體的沖突檔案全路徑
exclude 'META-INF/LICENSE.txt'
}
//預設配置
defaultConfig {
applicationId "com.locove.meet"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled=true//65536問題
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']//重新配置路徑
}
}
buildTypes {
release {
// zipAlign優化
zipAlignEnabled true
// 移除無用的resource檔案
shrinkResources false
// 混淆
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.releaseConfig
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.code.gson:gson:2.2.+'
testCompile 'junit:junit:4.12'
}