Android工作室Gradle构建速度加快

时间:2013-06-26 15:53:37

标签: android android-studio

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

我的i5每次更改都需要几分钟。

知道如何加快Gradle的变化吗?

22 个答案:

答案 0 :(得分:99)

绝对有所作为:How To… Speed up Gradle build time

只需在以下目录中创建名为gradle.properties的文件:

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

将此行添加到文件中:

org.gradle.daemon=true

答案 1 :(得分:77)

更改此设置后,我的编译时间缩短为10分钟。

第1步:

  

设置(ctrl + Alt + S) - &gt;

     

构建,执行,部署 - &gt;

     

编译器 - &gt;

     

输入&#34; --offline&#34;在命令行选项框中。

第2步:

  

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

     

&安培;点击Apply - &gt;行

enter image description here

第3步:在您的gradle.properties文件中 - &gt;添加以下行

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

  

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

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

答案 2 :(得分:62)

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

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

关于守护进程设置为何使构建更快的原因: https://www.timroes.de/2013/09/12/speed-up-gradle/

答案 3 :(得分:42)

开发人员正在努力。就像我在this answer中发布的那样,现在最快的解决方案是从命令行使用gradle,你应该切换到你没有开发的所有模块的二进制库。在g +上有一个discussion与开发者有关。

答案 4 :(得分: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中查看此选项

enter image description here

enter image description here

答案 5 :(得分:7)

有更新版本的gradle(版本2.4)。

您可以通过打开项目结构&#39;为项目设置此项目。文件菜单中的对话框,

  

Project Structure -> Project -> Gradle version

并将其设置为&#39; 2.4&#39;。
您可以在this link了解有关提升效果的更多信息。

答案 6 :(得分: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 文件(全局在 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 或本地项目),并添加以下行:

  String hql = "from Records where  DATE(startDate)= DATE(:date) ";
        Query query = session.createQuery(hql);
        query.setParameter("date", new Date());
        System.out.println(query.list().size());

答案 7 :(得分:6)

使用Android Studio 2.1,您可以启用“Dex In Process”以加快应用构建速度。

enter image description here

您可以在此处获取有关此内容的更多信息:https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e#.vijksflyn

答案 8 :(得分:6)

这就是我所做的,我的gradle构建速度得到了显着提升!第一次构建时从1分钟到20秒,后续构建从40秒到5秒。

gradle.properties 文件中 加上这个:

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

命令行参数中,通过转到文件&gt;其他设置&gt;默认设置&gt;构建,执行,部署&gt;编译器并将以下参数添加到命令行参数

添加:

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

See image here

答案 9 :(得分:4)

  1. 启用离线工作

  2. 通过在gradle.properties

  3. 中添加以下代码来改善Gradle性能
      

    org.gradle.daemon =真
        org.gradle.parallel =真

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

答案 10 :(得分:4)

dexOptions {
    incremental true
    javaMaxHeapSize "4g"
}

答案 11 :(得分:3)

根据维基媒体应用Android团队page,优化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, Linux <上的〜/ .gradle / strong>和 Mac OS X

    在您的主目录中设置属性是good practice,而不是在项目级别。

答案 12 :(得分:2)

对于更快的构建,请将Gradle守护程序的最大堆大小增加到2048 MB以上。

为此,请在项目 gradle.properties 中设置
org.gradle.jvmargs=-Xmx2048M

答案 13 :(得分:2)

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

通过其包装器导入Gradle项目时,IDE可能会要求使用Gradle'all'分发。这非常好,有助于IDE为构建文件提供代码完成。 这不仅意味着您不必自己手动安装Gradle,而且还确保使用构建所针对的Gradle版本。这使您的历史构建更可靠。 有关详细信息,请参阅Executing a build with the Wrapper

答案 14 :(得分:1)

添加build.gradle文件:

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

我希望它有所帮助。

答案 15 :(得分:1)

我正在使用Windows 10和1TB固态运行第5代i7。 我压缩了Android Studio Projects文件夹并获得了大约80%的提升。 希望这会有所帮助。

然后我将它与上述解决方案结合起来,即(org.gradle.parallel = true,org.gradle.daemon = true)。性能提升令人印象深刻。

<强>此外:

所有上述答案都是完全正确的,但我必须说明一个Android开发人员(4年半)的经验:没有Android / Gradle开发人员应该在带有微调驱动器的机器上工作,你需要分叉出于固态。我们每天都在IDE 100s中点击播放按钮。当我从一个微调器转到SSD(后Gradle)时,我的速度和效率确实快了2到4倍,我保证你在这里不夸张。

现在我不是在谈论拥有小型SSD和大型微调器的机器,我说的是一块大SSD。如果您已经拥有一台带有小型SSD和大型微调器的机器,您可以将小型微调器升级为500GB SSD并将SSD设置为安装了开发人员工具的主OS驱动器。

因此,如果您在快节奏的环境中工作,请将此帖子显示给您的老板。一个不错的1TB固态硬盘将为您带来约300英镑(包括增值税),或500英镑固态硬盘约160英镑。根据您是初级或高级Android开发人员,如果您投资较小的,驱动器将在1-2个工作周内支付自己的工资(工资费用),或者大约2个半到5个工作日;说500GB SSD。

许多开发人员可能会认为情况并非如此,但Gradle就是这种情况,因为Gradle系统在直接磁盘访问方面非常困难。如果您使用.NET / C#/ VB Net或其他开发工具,您将不会注意到太多差异,但Gradle的差异是巨大的。如果你按照这个帖子行事,我向你保证,你不会失望的。就个人而言,我正在使用第五代i7和8GB RAM,最初配备1TB Spinner,我将其升级为三星SSD 840 EVO 1TB,我从未回头过。我从https://www.aria.co.uk购买了我的。

希望这会有所帮助。此外,我必须声明这不是一个商业动机的帖子,我只是推荐Aria,因为我之前已经多次使用它们并且它们一直都很可靠。

答案 16 :(得分:1)

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

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

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

增加堆的大小项目的时间安排。通常,在构建应用程序时,多个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”

答案 17 :(得分:1)

从android文件夹中打开gradle.properties并取消注释突出显示的行,并根据您的计算机配置提供内存值。 我的机器上有8GB的内存,所以我分别给了最大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

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

答案 18 :(得分:0)

在项目中启用multidex时通常会发生这种情况。 这可能会减慢您的开发过程! 根据{{​​3}}:

  

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

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

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

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

具有集成说明的演示项目可在以下位置找到: https://github.com/akhgupta/AndroidLocalMavenRepoAARDemo

答案 21 :(得分:0)

右键单击 Drawable 文件夹并将 png/jpg 图像转换为 webp 格式它显着改善了 gradle