【Android】如何加速 AndroidStudio 的编译效率

引言

如果你之前用eclipse开发过Android app的话,转到android studio的第一反应也许就是:”编译速度有点慢“,表现的最明显的一点就是,每次android studio使用gradle编译,即便是更改的代码量很少,也会按照预先设置的task的顺序,依次走完编译的各项流程。这时候如果电脑CPU配置不高的时候,就会超级卡界面,更别说改代码了。

所以 这点就让人很痛苦, 然而问题总还是要被解决的,作者曾经亲眼看到过使用android studio仅仅用了2.5秒就编译完毕(在代码更改很少的情况下)。 现在把如何优化gradle编译速度的方法记录在此,希望可以 帮助到广大的同行们。


准备工作

首先,保证项目使用的Gradle是最新的,我这边用的是2.10版本。因为Gradle 2.4之后在编译效率上面有了一个非常大的提高,看下图官方的速度对比。

这是官方的速度对比,下一代编译速度更快


然后先在你的项目build.gradle文件内(不是app里面的gradle文件), 就是这里:

这里写图片描述

添加一个task, 代码如下:

task wrapper(type: Wrapper) {
    gradleVersion = '2.10'
}

加进去以后是这个样子:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.

task wrapper(type: Wrapper) {
    gradleVersion = '2.10'
}

buildscript {

    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }

    ext {
        compileSdkVersion = 21
        buildToolsVersion ="23.0.2"
        minSdkVersion = 18
        targetSdkVersion = 21

        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
    }

}

然后打开terminal, 输入./gradlew wrapper,Windows 下输入:

gradlew wrapper

然后gradle就会自动去下载2.4版本,这也是官方推荐的手动设置gradle的方法


守护进程,并行编译

通过以上步骤,我们设置好了 Android Studio 使用最新的 Gradle 版本,下一步就是正式开启优化之路了。我们需要将gradle作为守护进程一直在后台运行,这样当我们需要编译的时候,gradle就会立即跑过来然后 吭哧吭哧的开始干活。除了设置gradle一直开启之外,当你的工作空间存在多个project的时候,还需要设置gradle对这些projects并行编译,而不是单线的依次进行编译操作。

说了那么多, 那么怎么设置守护进程和并行编译呢?其实非常简单,gradle本身已经有了相关的配置选项,在你电脑的GRADLE_HOME这个环境变量所指的那个文件夹内,有一个.gradle/gradle.properties文件。 在这个文件里,放入下面两句话就OK了:

org.gradle.daemon=true
org.gradle.parallel=true

有一个地方需要注意的是,android studio 本身在编译的时候,已经是使用守护进程中的gradle了,那么这里加上了org.gradle.daemon=true就是保证了你在使用命令行编译apk的时候也是使用的守护进程.

你也可以将上述的配置文件放到你project中的根目录下,以绝对确保在任何情况下,这个project都会使用守护进程进行编译.不过有些特殊的情况下也许你应该注意守护进程的使用,具体的细节参考官网When should I not use the Gradle Daemon?

在使用并行编译的时候必须要注意的就是,你的各个project之间不要有依赖关系,否则的话,很可能因为你的Project A 依赖Project B, 而Project B还没有编译出来的时候,gradle就开始编译Project A 了.最终 导致编译失败.具体可以参考官网Multi-Project Building and Testing

还有一些额外的gradle设置也许会引起你的兴趣,例如你想增加堆内存的空间,或者指定使用哪个jvm虚拟机等等(代码如下)

org.gradle.jvmargs=-Xmx768m
org.gradle.java.home=/path/to/jvm

如果你想详细的了解gradle的配置,请猛戳官网 Gradle User Guide



【参考资料】:

1、Boosting the performance for Gradle in your Android projects
2、译文:优化android studio编译效率的方法
3、How/when to generate Gradle wrapper files?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值