Android Studio Gradle构建加快


163

自上次更新(6月25日开始构建)以来,Android Studio Gradle中的所有更改都非常缓慢。当您编辑文件并在keyup上重新编译时,它似乎还可以自动跟踪更改。

每次更改都会在我的i5上花费几分钟。

知道如何加快我的Gradle更改吗?



1
对于那些花时间阅读答案和问题的人,这不是重复的问题,正如@Dave Jarvis所建议的那样。但这与AS的旧Beta版本高度相关,可能与当前版本几乎没有关系。
Einar Sundgren 2015年


Answers:



99

绝对会有所作为如何...加快Gradle的构建时间

只需gradle.properties在以下目录中创建一个文件即可:

/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)

将此行添加到文件中:

org.gradle.daemon=true

2
好答案。有关进一步详细的阅读,请检查 SO答案。
苏菲安2015年

12
从您的链接中:“注意:这仅会影响控制台构建。AndroidStudio始终使用Gradle守护程序(并根据您的设置进行其他优化)。”
ChiefTwoPencils's

2
我有gradle.properties文件的.gradle目录。但是还是要花很多时间。任何建议
CoDe15 2015年


进行更改后,重新启动Android Studio。
伊曼·马拉希

78

更改此设置后,我的编译时间从10分钟减少到10秒。

第1步:

设置(ctrl + Alt + S)->

构建,执行,部署->

编译器->

--offline在命令行选项框中键入“ ”。

第2步:

选中“并行编译独立模块”复选框。

并单击应用->确定

在此处输入图片说明

第3步:在gradle.properties文件中->添加以下行

org.gradle.jvmargs=-Xmx2048M -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true

更新:

如果您使用的是Android Studio 2.0或更高版本,请尝试“即时运行”

设置→构建,执行,部署→即时运行→启用即时运行。

有关Instant Run的更多信息-https: //developer.android.com/studio/run/index.html#instant-run


6
我尝试了一下,确实大大加快了构建速度。我知道该选项现在将使其离线构建,离线构建是否有任何不利条件?
西蒙

5
@Simon-缺点是您将无法下拉build.gradle文件中标识的依赖项的最新版本。它运行速度更快,因为它使用了这些导入库的缓存快照。对于某些开发人员而言,稳定性至关重要,但离线时间过长可能会最终使他们陷入困境,最终导致这些依赖关系演变,从而使该项目落伍。
Mark Lapasa 2015年

1
由于可租可买这个工作得很好,我和我的gradle这个建造速度增加
Android_programmer_office

@Simon,当您开始开发时,只需在上面进行设置,然后停止,就在夜晚结束时将其关闭,最后一次运行该应用程序,以使所有内容保持同步。还是会有这个问题?
索伦

1
它从33秒减少到5秒:))
米龙(Miron

62

通过将以下内容添加到android studio的gradle.properties文件中,我能够将旧的core2duo笔记本电脑(运行linux mint)上的gradle构建从43秒减少到25秒

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

有关守护程序设置为何使构建速度更快的来源:https//www.timroes.de/2013/09/12/speed-up-gradle/


3
从您的链接中:“注意:这仅会影响控制台构建。AndroidStudio始终使用Gradle守护程序(并根据您的设置进行其他优化)。”
ChiefTwoPencils's

2
并行选项甚至在AS中也改善了我的构建。谢谢您:)
jonathanrz 2015年

3
并行选项没有改善我的构建。
弗拉多·潘迪奇(VladoPandžić)

谢谢。该解决方案使我的构建时间从7分钟缩短至23秒...
Vignesh Bala

thanx使我的构建从两分钟变成了3秒
Pouya Samie '18

12

遵循以下步骤将使其速度提高10倍,并将构建时间减少90%

首先在以下目录中创建一个名为gradle.properties的文件:

/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)

将此行添加到文件中:

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

并在Android Studio中选中此选项

在此处输入图片说明

在此处输入图片说明


7

有一个较新版本的gradle(版本2.4)。

您可以通过从“文件”菜单打开“项目结构”对话框,为您的项目设置此设置,

Project Structure -> Project -> Gradle version

并将其设置为“ 2.4”。
您可以在此链接上阅读有关提高性能的更多信息。


2
谢谢,Gradle 2.4版节省了大约14秒。
苗1007

5
这使我的构建时间更长
EgemenHamutçu


6

这就是我所做的,并且我的gradle构建速度大大提高了!第一次构建从1分钟到20秒,随后的构建从40秒到5秒。

gradle.properties文件中添加以下内容:

org.gradle.jvmargs=-Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

命令行参数中通过转至文件>其他设置>默认设置>生成,执行,部署>编译器,并将以下参数添加到命令行参数中

添加此:

--debug --stacktrace -a, --no-rebuild -q, --quiet --offline

在这里查看图片


6

进行Android开发时,尽量避免使用仅具有8 GB RAM的Mac / PC。一旦启动了1个仿真器(Genymotion或其他仿真器),在使用gradle构建的Android Studio中,构建时间就会变得极其缓慢。即使您对1个源文件进行简单的单行更改,也会发生这种情况。

关闭仿真器并使用真实的设备会有很大帮助,但是当然这是非常有限的,而且灵活性较差。减少模拟器的RAM使用率设置可以有所帮助,但是最好的方法是确保笔记本电脑至少具有12-16 GB的RAM。

更新(2017年6月):现在有几篇很好的medium.com文章详细解释了如何加快Android Studio gradle构建速度,甚至可以在8 GB的机器上运行:

总结的共识是:

创建gradle.properties文件(在~/.gradle/gradle.properties项目中全局或本地),然后添加以下行:

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

4
  1. 启用离线工作

  2. 通过在中添加以下代码来提高Gradle性能 gradle.properties

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

逐步指南:http : //www.viralandroid.com/2015/08/how-to-make-android-studio-fast.html


让我们保持这些答案的多样性,并专注于OP问题的细节。回复:stackoverflow.com/a/34828203 ... stackoverflow.com/a/34827929 ... stackoverflow.com/a/34827858 ... stackoverflow.com/a/34827827 ... stackoverflow.com/a/34827788
Drew


3

根据Wikimedia Apps Android小组的页面,优化Gradle构建的一种好方法是将此行添加到您的〜/ .gradle / gradle.properties中

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

对于那些没有文件的人,有两种方法可以处理:

  1. 通过在项目根目录中创建一个名为gradle.properties的文件,将文件添加到您的项目本地

  2. 您可以在主目录中创建相同的文件(在Windows上为%UserProfile%.gradle ,在LinuxMac OS X上为〜/ .gradle),为所有项目全局设置它们。

    在主目录(而不是项目级别)中设置属性是一种好习惯


2

您也可以使用命令行以获得更好的性能<task name>。您可以在Linux的项目根文件夹中使用命令./gradlew 或使用gradlew.bat文件(例如gradlew <task name>。),当您第一次为给定的Gradle运行上述命令之一时版本,它将下载相应的Gradle发行版并使用它执行构建。

通过包装器导入Gradle项目时,您的IDE可能会要求使用Gradle“全部”发行版。这非常好,可以帮助IDE为构建文件提供代码完成。这不仅意味着您不必自己手动安装Gradle,而且还可以确保使用该构建版本专用的Gradle版本。这使您的历史建筑更加可靠。有关更多信息,请参阅使用包装程序执行构建



1

添加build.gradle文件:

android {
...
dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
...
}

希望对您有所帮助。


1

我正在运行带有Windows 10和1TB固态硬盘的第五代i7。我压缩了Android Studio Projects文件夹,并获得了80%的提升。希望这可以帮助。

然后,我将其与以上解决方案(即(org.gradle.parallel = true,org.gradle.daemon = true))结合在一起。性能提升非常出色。

另外:

以上所有答案都是完全正确的,但作为一名经验丰富的Android开发人员(四年半),我必须声明:没有Android / Gradle开发人员应在带有旋转驱动器的计算机上工作,您需要付出代价固体状态。我们每天都在IDE中按一下播放按钮100次。当我从微调器转到SSD(在Gradle之后)时,我的速度和效率实际上提高了2到4倍,我向您保证,我不会在这里夸大其词。

现在,我不是在谈论一台带有小型SSD和大旋转器的机器,而是在谈论1个大型SSD。如果您已经有一台带有小型SSD和大型微调器的计算机,则可以将小型微调器升级为500GB SSD,然后将SSD设置为安装了开发人员工具的主OS驱动器。

因此,如果您在快速节奏的环境中工作,请将此帖子展示给老板。像样的1TB SSD会使您损失约300英镑(含增值税),而500GB SSD会使您损失约160英镑。根据您是初级还是高级Android开发人员,驱动器将在1-2个工作周内(在工资支出中)收回成本(如果您投资较小的设备,则大约需要2个半至5个工作日);例如500GB SSD。

许多开发人员可能会争论并非如此,但是Gradle就是这样,因为Gradle系统很难直接访问磁盘。如果您使用.NET / C#/ VB Net或其他开发工具,则不会发现太大的区别,但是Gradle的区别是巨大的。如果您对这篇文章采取行动,我向您保证,您不会失望的。我个人使用的是具有8GB RAM的第五代i7,它最初随附1TB Spinner,并将其升级到Samsung SSD 840 EVO 1TB,从那时起我再也没有回头。我是从https://www.aria.co.uk购买的。

希望这可以帮助。另外,我必须指出,这不是出于商业目的的帖子,我只是推荐Aria,因为我之前已经使用过很多次,并且它们一直都很可靠。


1

我们可以在gradle.properties文件中添加一些命令:

org.gradle.configureondemand = true-此命令将告诉gradle仅构建它真正需要构建的项目。使用守护程序— org.gradle.daemon = true-即使构建完成后,守护程序也可以使gradle实例保持启动并在后台运行。这将消除初始化gradle所需的时间,并显着减少构建时间。

org.gradle.parallel = true-允许gradle并行构建项目。如果项目中有多个模块,则通过启用此功能,gradle可以并行运行独立模块的构建操作。

增加堆大小— org.gradle.jvmargs = -Xmx3072m -XX:MaxPermSize = 512m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8-自android studio 2.0起,gradle在此过程中使用dex来减少构建时间项目。通常,在构建应用程序时,多个dx进程将在不同的VM实例上运行。但是从Android Studio 2.0开始,所有这些dx进程都在单个VM中运行,并且该VM也与gradle共享。由于所有dex进程都在同一VM实例上运行,因此可以显着减少构建时间。但这需要更大的内存来容纳所有dex处理和gradle。这意味着您需要增加gradle守护程序所需的堆大小。默认情况下,守护程序的堆大小约为1GB。

确保不使用动态依赖项。即不要使用实现“ com.android.support:appcompat-v7:27.0.+”。此命令意味着gradle每次构建应用程序时都会联机并检查最新版本。而是使用固定版本,即“ com.android.support:appcompat-v7:27.0.2”


1

将此添加到您的gradle.properties文件

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

1

从android文件夹中打开gradle.properties并取消注释突出显示的行,并根据您的计算机配置提供内存值。我的机器上有8gb的ram,所以我分别给了最大4096mb和1024mb。

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
//Uncomment below line for providing your system specific configuration
#org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError - Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
#http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 //Uncomment below line to allow parallel process execution.
 #org.gradle.parallel=true

此后,我的构建时间减少了一半。建设愉快!


0

在项目中启用multidex时,通常会发生这种情况。这可能会减慢您的开发过程!! 根据文档

multidex配置需要显着增加构建处理时间,因为构建系统必须做出复杂的决定,即哪些类必须包含在主DEX文件中,哪些类可以包含在辅助DEX文件中。这意味着使用multidex进行增量构建通常会花费更长的时间,并有可能减慢您的开发过程。

但您可以对此进行优化:

为了减少更长的增量构建时间,您应该使用预排序在多个构建之间重用multidex输出。

如果您使用的是Android Studio 2.3及更高版本,则在将应用程序部署到运行Android 5.0(API级别21)或更高版本的设备时,IDE会自动使用此功能。

因此,您需要将minSdkVersion设置为21或更高

但是,如果您的生产版本需要支持低于21的minSdkVersion,例如19

您可以使用productFlavors为您的开发版本设置minSdkVersion 21

    android {
    defaultConfig {
        ...
        multiDexEnabled true
        // The default minimum API level you want to support.
        minSdkVersion 15
    }
    productFlavors {
        // Includes settings you want to keep only while developing your app.
        dev{
            //the IDE automatically uses  pre-dexing feature to mitigate longer incremental when deploying your app to a device running Android 5.0 !
            minSdkVersion 21
        }
        prod {

        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile 'com.android.support:multidex:1.0.3'
}

0

我确实更喜欢从命令行进行构建,以缩短构建时间。如果您的应用程序代码量很大并且有多个模块,则可以尝试按此处所述使用Local AAR方法,它将大大提高Android Studio性能和gradle构建时间。它也与命令行版本兼容

https://blog.gojekengineering.com/how-we-im-proved-performance-and-build-times-in-android-studio-306028166b79

带有集成说明的演示项目可以在这里找到: https : //github.com/akhgupta/AndroidLocalMavenRepoAARDemo

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.