Gradle 编译加速

一、分析Gradle构建慢的原因

1.配置Gradle构建报表

File --> Settings --> Build,Execution,Deployment --> Compiler
修改 Command-line Options:内容,追加--profile

Gradle  编译加速

2.查看生成的gradle构建报表

Sync Project , build , run, Make project ...
之后会在 Projectbuild下,生成 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 打勾,如下:


Gradle  编译加速
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'
}
上一篇:JNI(Java Native Interface)


下一篇:[Google API](2)什么是google API