Android 工作室 Gradle 构建加速

自上次更新(从6月25日开始构建)以来,安卓工作室 Gradle 的任何变化都非常缓慢。它似乎还可以在编辑文件并在 keyup 上重新编译时自动跟踪更改。

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

有什么办法可以加快我的格拉德尔变化吗?

152933 次浏览

开发人员正在研究。就像我在 这个答案中发布的一样,目前最快的解决方案是使用命令行中的 gradle,并且对于所有未开发的模块,应该切换到二进制库。在 g + 上有一个 讨论,与开发人员有关。

肯定会有所不同: 如何... 加快梯级构建时间

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

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

将这一行添加到文件中:

org.gradle.daemon=true

通过在 android 工作室的 gradle.properties 文件中添加以下内容,我能够在我的老式 core2duo 笔记本电脑(运行 linux 薄荷)上将 gradle 构建从43秒减少到25秒

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

为什么守护进程设置使构建更快: Https://www.timroes.de/2013/09/12/speed-up-gradle/

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

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

Project Structure -> Project -> Gradle version

设置为’2.4’。
您可以在 这个链接上阅读更多关于提高性能的内容。

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

第一步:

设置(ctrl + Alt + S)->

构建、执行、部署->

编译器->

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

第二步:

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

及按「应用」-> 「确定」

enter image description here

步骤3: 在 gradle.properties 文件中-> Add following lines

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 工作室2.0或以上版本,请尝试即时运行

设置→构建、执行、部署→即时运行→启用即时 快跑。

更多关于即时运行的信息 -https://developer.android.com/studio/run/index.html#instant-run

  1. 启用脱机工作

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

Daemon = true
并行 = 真

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

还可以使用命令行获得更好的性能。你可以使用这个命令。/gradlew <task name>从你的项目的根文件夹或者使用 gradlew <task name>。当你第一次运行上面的命令时,它会下载相应的 Gradle 发行版并用它来执行构建。

当通过它的包装器导入 Gradle 项目时,IDE 可能会要求使用 Gradle‘ all’发行版。这非常好,有助于 IDE 为构建文件提供代码完成。 这不仅意味着你不必自己手动安装 Gradle,而且你肯定会使用这个版本的 Gradle。这使您的历史构建更加可靠。 更多信息请参考 < a href = “ https://docs.gradle.org/current/userguide/gradle _ Wrapper.html”rel = “ nofollow”> 使用 Wrapper 执行构建

添加 build.gradle文件:

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

希望能有所帮助。

dexOptions {
incremental true
javaMaxHeapSize "4g"
}

按照下面的步骤将使其速度提高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

使用 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

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

在项目 < em > gradle.properties 中执行此设置 < br > org.gradle.jvmargs=-Xmx2048M < br > 。

这就是我所做的,我的等级构建速度得到了戏剧性的提高!第一次构建从1分钟到20秒,随后的构建从40秒到5秒。

Gradle 房地产公司文件中 添加以下内容:

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

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

添加以下内容:

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

See image here

在开发 Android 时,尽量避免使用只有8GB 内存的 Mac/PC。只要启动一个模拟器(Genymotion 或其他模拟器) ,在 Android Studio 中使用分级构建时,构建时间就会变得极其缓慢。即使只对1个源文件进行简单的一行更改,也会发生这种情况。

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

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

总结的共识是:

创建一个 Gradle 房地产公司文件(~/.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

根据 维基媒体应用的 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. 通过在主目录(% UserProfile%)中创建相同的文件,可以为所有项目全局设置它们。在 窗户上的级数。LinuxMac OS X级)

    它是一个 很好的练习,用于在您的主目录中设置属性,而不是在项目级别上设置。

我运行的是第5代 i7,带有 Windows10和1TB 固态。 我压缩了 Android Studio Projects 文件夹,得到了80% 的提升。 希望这个能帮上忙。

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

此外:

以上所有的答案都是完全正确的,但是作为一个有4年半经验的 Android 开发者,我必须声明: 没有 Android/Gradle 开发者应该在一台带有旋转驱动器的机器上工作,你需要支付固态硬盘。我们每天都要在 IDE 中点击播放按钮100次。当我从一个旋转器到固态硬盘(后级) ,我的速度和效率是字面上的2-4倍快,我向你保证,我在这里没有夸张。

现在我不是在说一台机器有一个小的固态硬盘和一个大的旋转器,我是在说一个大的固态硬盘。如果你已经有了一台带有小 SSD 和大微调器的机器,你可以把小微调器升级为500GB 的 SSD,并将 SSD 设置为安装了开发工具的主操作系统驱动器。

因此,如果你在一个快节奏的环境中工作,请把这篇文章展示给你的老板。一个像样的1TB 固态硬盘将花费你大约300(包括增值税) ,或500GB 固态硬盘大约160。这取决于你是一个初级或高级的 Android 开发者,驱动器将在1-2个工作周内支付自己的费用(工资支出) ,或者大约2个半到5个工作日,如果你投资在一个较小的,比如500 GB 的固态硬盘。

许多开发人员可能会争辩说,情况并非如此,但 Gradle 却是如此,因为 Gradle 系统对于直接访问磁盘非常困难。如果你和。NET/c #/VB NET 或其他开发工具你不会注意到很大的差异,但在 Gradle 的差异是巨大的。我向你保证,如果你按照这个职位行事,你不会失望的。就我个人而言,我使用的是第五代 i7,内存为8 GB,最初带有一个1TB 的 Spinner,我将其升级为三星 SSD 840 EVO 1TB,从此再也没有回头。我的是从 https://www.aria.co.uk买的。

希望这个能帮上忙。另外我必须声明,这不是一个商业动机的职位,我只是推荐 Aria,因为我已经使用过很多次,他们一直是可靠的。

当您在项目中启用 multidex 时,这种情况经常发生。 < strong > < em > 这可能会减缓您的开发过程! 根据 医生:

Multidex 配置需要显著增加构建处理时间,因为构建系统必须对哪些类必须包含在主 DEX 文件中以及哪些类可以包含在辅助 DEX 文件中作出复杂的决定。这意味着使用 multidex 的增量构建通常需要更长的时间,并且可能会降低开发过程的速度。

但是你可以优化它:

为了减少较长的增量构建时间,您应该使用预索引在构建之间重用 multidex 输出。

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

所以你需要设置 < em > minSdkVersion 至21或以上

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

你可使用 为您设置 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'
}

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

Configureondemand = true-这个命令将告诉 gradle 只构建它真正需要构建的项目。 使用 Daemon ー org.gradle.Daemon = true-即使在构建完成之后,Daemon 也会在后台保持 gradle 的实例运行。这将消除初始化分级所需的时间,并显著降低构建时间。

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

增加堆大小ー org.gradle.jvmargs =-Xmx3072m-XX: MaxPermSize = 512m-XX: + HeapDumpOnOutOfMemory-Dfile.coding = UTF-8-自从安卓工作室2.0以来,gradle 在过程中使用 dex 来减少项目的构建时间。通常,在构建应用程序时,多个 dx 进程在不同的 VM 实例上运行。但是从 Android Studio 2.0开始,所有这些 dx 进程都在单个 VM 中运行,而且这个 VM 也与 gradle 共享。这大大减少了构建时间,因为所有 dex 进程都在相同的 VM 实例上运行。但是这需要更大的内存来容纳所有的 dex 进程和分级。这意味着您需要增加 gradle 守护进程所需的堆大小。默认情况下,守护进程的堆大小约为1GB。

确保不使用动态依赖关系 实现‘ com.android.support: appcompat-v7:27.0. +’。 这个命令意味着 gradle 每次构建应用程序时都会上线检查最新版本。 取而代之的是使用固定的版本,例如‘ com.android.support: appcompat-v7:27.0.2’

将其添加到 gradle.properties文件中

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

我确实更喜欢从命令行构建,以获得更好的构建时间。如果您的应用程序代码基础很大,并且您有多个模块,那么您可以尝试 本地 AAR 方法,就像这里描述的那样,它将给您在 Android Studio 性能和等级构建时间方面带来很大的提升。它也与命令行生成兼容

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

带有集成说明的演示项目可以在这里找到: < a href = “ https://github.com/akhgupta/AndroidLocalMavenRepoAARDemo”rel = “ nofollow noReferrer”> https://github.com/akhgupta/androidlocalmavenrepoaardemo

从 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

在这之后,我的构建时间减少了一半。 快乐的建筑! !

右键单击可绘制文件夹并将 png/jpg 图像转换为 webp 格式,显著提高了档次

来自 android 开发者文档:

配置 JVM 垃圾收集器。它将构建时间减少到2到4秒

Properties 文件

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

请参阅此开发人员文档

遵循 Android Studio 和 Gradle 的性能指南

总的来说

  • 始终保持 最新的分级版本以获得新的性能改进
  • 尽可能地模块化您的项目 ,以便从 Gradle 并行工作中获益
  • 了解 等级属性并了解它们的作用