天天看點

Gradle 編譯加速

一、分析Gradle建構慢的原因

1.配置Gradle建構報表

File --> Settings --> Build,Execution,Deployment --> Compiler

修改 Command-line Options:内容,追加

--profile

Gradle 編譯加速
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 打勾,如下:

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'
}
           

繼續閱讀