一、分析Gradle构建慢的原因
1.配置Gradle构建报表
File --> Settings --> Build,Execution,Deployment --> Compiler
修改 Command-line Options:内容,追加--profile
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'
}