Google I/O 中提到的提升 Android studio 的编译速度的几个建议

Google I/O 中有一个How to speed up your slow Gradle builds 的演讲,提出了一些加快Android studio编译速度的建议,整理以下:javascript

1. 使用最新的Android gradle插件

Google tools team一直致力于加快Android studio的编译速度,所以最好使用最新的Android Gradle Plugin:java

buildscript {
  repositories {
    google()
  }

 dependencies {
    classpath ‘com.android.tools.build.gradle:3.0.0-alpha3’
 }
}复制代码

2. 避免使用multidex

咱们知道当方法书超过64k时,须要配置multidex,可是若是咱们的工程minSdkVersion 设置为 20 或更低值,那么构建时间会大大增长,由于构建系统必须就哪些类必须包括在主 DEX 文件中以及哪些类能够包括在辅助 DEX 文件中做出复杂的决策。android

这种状况下能够利用 productFlavors(一个开发定制和一个发布定制,具备不一样的 minSdkVersion值)建立两个构建变型。缓存

android {
    defaultConfig {
        ...
        multiDexEnabled true
    }
    productFlavors {
        dev {
            // Enable pre-dexing to produce an APK that can be tested on
            // Android 5.0+ without the time-consuming DEX build processes.
            minSdkVersion 21
        }
        prod {
            // The actual minSdkVersion for the production version.
            minSdkVersion 14
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile 'com.android.support:multidex:1.0.1'
}复制代码

3. 减小打包的资源文件

在开发模式下,能够只打包须要的资源,没必要适配全部的资源文件:jvm

productFlavors {
  dev {
    minSdkVersion 21
    //only package english translations, and xxhdpi resources 
    resConfigs (“en”, “xxhdpi”)
  }
}复制代码

4. 禁用 PNG 处理

PNG优化在默认状况下是打开的,咱们能够在开发模式下禁用:ide

android {
  if (project.hasProperty(‘devBuild’)){
    aaptOptions.cruncherEnabled = false
  }
}复制代码

5. 使用Instant run

Instant Run在android studio 3.0中有了不少的改进,能够尝试使用。gradle

6. 不要随便修改配置

Gradle使用很是灵活,可是若是不正确的使用反而会下降编译速度。好比:优化

//this is BAD! 这种作法会致使每次编译 manifest文件都须要被修改,形成没必要要的编译时间增长
def buildDateTime = new Date().format(‘yyMMddHHmm’).toInteger()
android {
  defaultConfig {
    versionCode buildDateTime
 }
}复制代码

正确的作法是:动画

def buildDateTime = project.hasProperty(‘devBuild’) ? 100 : new Date().format(‘yyMMddHHmm’).toInteger()
android {
  defaultConfig {
    versionCode buildDateTime
 }
}复制代码

7. 避免使用动态版本依赖

通常使用固定版本依赖便可。ui

8. 注意内存使用

要注意分配给Gradle的内存使用:
目前配置

org.gradle.jvmargs=-Xmx1536m复制代码

便可,没必要再配置:

dexOptions {
 javaMaxHeapSize = ‘4g’
}复制代码

9. 使用Gradle caching

在Gradle 3.5中,使用cache能够缓存并重复利用以前builds的生成的文件。

# Set this in gradle.properties
org.gradle.caching=true复制代码

相关的演讲地址:www.youtube.com/watch?v=7ll…

欢迎关注公众号wutongke,按期推送移动开发前沿技术文章:

wutongke

推荐阅读

说一说Facebook开源的Litho
使用ConstraintLayout制做漂亮的动画

相关文章
相关标签/搜索