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

 
 

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

1. 使用最新的Android gradle插件

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

buildscript {
  repositories {
    google()
  }

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

2. 避免使用multidex

我们知道当方法书超过64k时,需要配置multidex,但是如果我们的工程minSdkVersion 设置为 20 或更低值,那么构建时间会大大增加,因为构建系统必须就哪些类必须包括在主 DEX 文件中以及哪些类可以包括在辅助 DEX 文件中作出复杂的决策。

这种情况下可以利用 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. 减少打包的资源文件

在开发模式下,可以只打包需要的资源,不必适配所有的资源文件:

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

4. 禁用 PNG 处理

PNG优化在默认情况下是打开的,我们可以在开发模式下禁用:

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

5. 使用Instant run

Instant Run在android studio 3.0中有了很多的改进,可以尝试使用。

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. 避免使用动态版本依赖

一般使用固定版本依赖即可。

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

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



作者:wutongke
链接:http://www.jianshu.com/p/6301f454de5c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值