一逮矛、分析Gradle構(gòu)建慢的原因
1.配置Gradle構(gòu)建報(bào)表
File --> Settings --> Build,Execution,Deployment --> Compiler
修改 Command-line Options:內(nèi)容漠烧,追加--profile
2.查看生成的gradle構(gòu)建報(bào)表
Sync Project
, build
, run
, Make project
...
之后會(huì)在 Project的 build下奔坟,生成 reports文件夾漂佩。用瀏覽器打開profile.html即可查看
二奕扣、解決Gradle構(gòu)建慢的方法
在gradle開始優(yōu)化之前先記錄下沒經(jīng)過(guò)優(yōu)化的build時(shí)間卿操。*Build > Clean Project
1.開啟gradle單獨(dú)的守護(hù)進(jìn)程
1.在下面目錄下面創(chuàng)建
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
這樣配置是對(duì)此計(jì)算機(jī)的studio用戶扳肛,所以對(duì)于所有項(xiàng)目都有效
2.設(shè)置 Gradle offline
File > Settings > Offline work 打勾叔汁,如下:
3.開發(fā)使用 SDK=21
android {
...
productFlavors {
dev {
minSdkVersion 21
}
release {
minSdkVersion 14
}
}
}
當(dāng)API 不小于21统求,使用 ART,在 Build 時(shí)只做 class to dex据块,不做 mergeing dex码邻,會(huì)省下大量的時(shí)間。
4.引入依賴時(shí)使用 aar
連接遠(yuǎn)程倉(cāng)庫(kù)網(wǎng)絡(luò)不好時(shí)候可以引入自己私有的maven倉(cāng)庫(kù)另假,或者一些國(guó)內(nèi)的maven倉(cāng)庫(kù)冒滩。
用網(wǎng)上第三方的依賴庫(kù)時(shí)盡量使用 aar ,自己的庫(kù)模塊也可以打包成aar浪谴。加快編譯速度开睡。
build.gradle
文件(主工程的Top-level)
apply from:"config.gradle"http://可以給所有的module引入一個(gè)配置文件
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()//引入遠(yuǎn)程倉(cāng)庫(kù)
maven { url MAVEN_URL }//引入自己的私有maven倉(cāng)庫(kù)
}
}
gradle.properties(全局配置文件)
# This can really make a significant difference if you are building a very complex project with many sub-module dependencies:
#sub-module并行構(gòu)建
org.gradle.parallel=true
#后臺(tái)進(jìn)程構(gòu)建
org.gradle.daemon=true
#私有maven倉(cāng)庫(kù)地址
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"
// 此處注釋保持默認(rèn)打開因苹,關(guān)閉后可使不嚴(yán)格的圖片可以通過(guò)編譯,但會(huì)導(dǎo)致apk包變大
//aaptOptions.cruncherEnabled = false
//aaptOptions.useNewCruncher = false
packagingOptions {
exclude 'META-INF/NOTICE.txt'// 這里是具體的沖突文件全路徑
exclude 'META-INF/LICENSE.txt'
}
//默認(rèn)配置
defaultConfig {
applicationId "com.locove.meet"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled=true//65536問(wèn)題
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']//重新配置路徑
}
}
buildTypes {
release {
// zipAlign優(yōu)化
zipAlignEnabled true
// 移除無(wú)用的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'
}