我有一个多项目(约 10 个模块),每次构建大约需要 20-30 秒。当我在 Android Studio 中按 Run 时,我每次都必须等待重新构建应用程序,这非常慢。
是否可以在 Android Studio 中自动化构建过程?或者你对如何加快这个过程有什么建议?
在 Eclipse 中,由于自动构建,在模拟器上运行相同的项目大约需要 3-5 秒。
这是我的 build.gradle 文件(应用程序模块):
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':libraries:SharedLibs')
compile project(':libraries:actionbarsherlock')
compile project(':libraries:FacebookSDK')
compile project(':libraries:GooglePlayServices')
compile project(':libraries:HorizontalGridView')
compile project(':libraries:ImageViewTouch')
compile project(':libraries:SlidingMenu')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 8
targetSdkVersion 16
}
}
硬件
很抱歉,将开发站升级到 SSD 和大量内存的影响可能比以下几点加起来还要大。
工具版本
提高构建性能是开发团队的首要任务,因此请确保您使用的是最新的 Gradle 和 Android Gradle Plugin。
配置文件
在适用的任何目录中创建一个名为 gradle.properties
的文件:
/home/<用户名>/.gradle/ (Linux)
/Users/<用户名>/.gradle/ (Mac)
C:\Users\<用户名>\.gradle (Windows)
附加:
# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
# TODO: disable daemon on CI, since builds should be clean and reliable on servers
org.gradle.daemon=true
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e#.krd1mm27v
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=512m -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
org.gradle.parallel=true
# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true
# Set to true or false to enable or disable the build cache.
# If this parameter is not set, the build cache is disabled by default.
# http://tools.android.com/tech-docs/build-cache
android.enableBuildCache=true
如果您将 Gradle 属性放置在 projectRoot\gradle.properties
,则它们在本地工作;如果将它们放置在 user_home\.gradle\gradle.properties
,则全局工作。如果您从控制台或直接从想法运行 gradle 任务,则应用属性:
IDE 设置
可以从 IDE 设置 GUI 调整 Gradle-IntelliJ 集成。启用“离线工作”(检查下面 yava 的答案)将禁用每个“同步 gradle 文件”上的真实网络请求。
https://i.stack.imgur.com/hGnDg.png
原生多索引
apk 构建中最慢的步骤之一是将 java 字节码转换为单个 dex 文件。启用本机 multidex(minSdk 21 仅用于调试构建)将有助于工具减少工作量(检查下面 Aksel Willgert 的答案)。
依赖项
首选 @aar
依赖项而不是库子项目。
在 mavenCentral、jCenter 上搜索 aar 包或使用 jitpack.io 从 github 构建任何库。如果您不编辑依赖库的源代码,则不应每次都使用项目源代码构建它。
杀毒软件
考虑从防病毒扫描中排除项目和缓存文件。这显然是与安全性的权衡(不要在家里尝试这个!)。但是如果你在分支之间切换很多,那么杀毒软件会在允许 gradle 进程使用它之前重新扫描文件,这会减慢构建时间(特别是 AndroidStudio 同步项目与 gradle 文件和索引任务)。在启用和不启用防病毒软件的情况下测量构建时间和进程 CPU 以查看是否相关。
分析构建
Gradle 内置了对 profiling projects 的支持。不同的项目使用插件和自定义脚本的不同组合。使用 --profile
将有助于发现瓶颈。
您可以忽略 gradle update-to-date 检查。
https://i.stack.imgur.com/wrwgo.png
对于运行 Android Studio 1.5 的 Windows:转到 File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)
从~30+秒降低到~3秒
gradle
时都会检查更新的依赖项。这很奇怪。
到处搜索,终于找到了适合我们的解决方案。启用并行构建(在 OSX 上:preferences -> compiler -> gradle -> "Compile independent modules in parallel"
)并启用“自动生成项目”将其从约 1 分钟降至约 20 秒。感谢/u/Covalence。
http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/
我最近购买了一个新的 SSD,并从 Windows 转到了 Linux。我的构建时间现在快了一个数量级,并且不再烦人。
尽管它没有直接回答您关于为什么它比 eclipse 慢的问题,但它表明该过程是受磁盘限制的,并且升级到 SSD 可能是一个(有些昂贵的)解决方案。我猜会有人在谷歌上搜索这个问题并在这里结束,他们可能会欣赏我的经验。
在 Android Studio 3.2.1 中加速 Gradle 构建
有没有觉得您正在等待 Android Studio 中的构建完成几分钟?我也是。这很烦人。幸运的是,有几种方法可以用来改进这一点。 Android 使用 Gradle 进行构建。最新版本是 4.6,与以前的版本相比有巨大的性能提升(有关详细信息,请参阅发行说明)。
第 1 步:更新 Gradle 版本完成此操作的更简单方法是:打开模块设置(您的项目)> 项目结构
https://i.stack.imgur.com/xFm0I.png
更新
更改为 Gradle 版本:4.6 并更改为 Android 插件版本:3.2.1
https://i.stack.imgur.com/2hNtg.png
从 https://services.gradle.org/distributions/gradle-4.6-all.zip 下载 Gradle Release 分发包并将其复制到 Gradle 文件夹:
https://i.stack.imgur.com/DNm1e.png
最后一步是在 Settings > Gradle 中添加您的分配
https://i.stack.imgur.com/jOrQL.png
不要忘记单击应用以保存更改。
第 2 步:启用离线模式、Gradle 守护进程和项目的并行构建离线模式告诉 Gradle 忽略更新到日期检查。 Gradle 每次都要求依赖项,并且具有此选项使其仅使用机器上已有的依赖项。从 android studio Setting 转到 Gradle,然后单击 Offline work 框。
https://i.stack.imgur.com/2HeBg.png
从 android studio Setting 中进入 Compiler 并在命令行框中添加“--offline”,然后点击 Compile Independent modules in parallel。
https://i.stack.imgur.com/W9cgJ.png
下一步是为您的项目启用 Gradle 守护程序和并行构建。并行构建将导致您的具有多个模块的项目(Gradle 中的多项目构建)并行构建,这应该会使大型或模块化项目的构建速度更快。
https://i.stack.imgur.com/Vhps7.png
这些设置可以通过修改 Gradle 脚本目录(即 ~/.gradle/gradle.properties)中名为 gradle.properties 的文件来启用。其中一些选项(例如 Complie 并行模块)可从 Android Studio 获得,也可以通过默认,但将它们放在 gradle.properties 文件中将在从终端构建时启用它们,并确保您的同事将使用相同的设置。但是如果你在一个团队中工作,有时你不能提交这些东西。
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit org.gradle.parallel=true
# When set to true the Gradle daemon is used to run the build. For local developer builds this is our favorite property.
# The developer environment is optimized for speed and feedback so we nearly always run Gradle jobs with the daemon.
org.gradle.daemon=true
使用守护进程将使您的构建启动更快,因为它不必每次都启动整个 Gradle 应用程序。 Gradle 守护程序默认不启用,但建议始终为开发人员的机器启用它(但对持续集成服务器禁用它)。有关此模式的常见问题解答可在此处找到 https://docs.gradle.org/current/userguide/gradle_daemon.html。对于某些项目,并行构建设置可能不安全。要求是您的所有模块都必须解耦,否则您的构建可能会失败(有关详细信息,请参阅 http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects)。
第 3 步:启用增量 dexign 并调整内存设置您可以通过打开增量 dexing 来加快构建速度。在模块的构建文件中:
https://i.stack.imgur.com/eWQwO.png
将此选项添加到您的 android 块:
dexOptions {
incremental true
}
在该 dexOptions 块中,您还可以指定 dex 进程的堆大小,例如:
dexOptions {
incremental true
javaMaxHeapSize "12g"
}
其中“12g”是 12GB 内存。可以在此处找到有关此的其他信息 google.github.io/android-gradle-dsl/current/ 您还可以在设置文件中配置 Gradle 参数,例如,如果您有一个大型项目,请增加最大堆大小:
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
在此处查看所有参数列表:https://docs.gradle.org/current/userguide/userguide_single.html#sec:gradle_configuration_properties 了解详细信息。
第 4 步:禁用防病毒 考虑从防病毒扫描中排除项目和缓存文件。这显然是与安全性的权衡。但是如果你在分支之间切换很多,那么杀毒软件会在允许 gradle 进程使用它之前重新扫描文件,这会减慢构建时间(特别是带有 gradle 文件和索引任务的 Android Studio 同步项目)。在启用和不启用防病毒软件的情况下测量构建时间和进程 CPU 以查看是否相关。我希望这有帮助。如果您对提高构建性能有任何疑问或其他提示,请发表评论。
如果使用 google play 服务,只依赖于你需要的库而不是整个 blob 可以让事情变得更快。
如果您只需要地图,请使用:
compile 'com.google.android.gms:play-services-maps:6.5.+'
代替:
compile 'com.google.android.gms:play-services:6.5.+'
后者将 20k 方法 (see blog) 带入类路径,这可能会使总方法计数超过 64k。
这将强制使用 proguard 或 multidex,即使是调试版本。对于我的一个项目,我有以下构建时间
multidex 构建(带有支持库)~40 秒
proguard build ~20sec
当方法限制 < 64k ~5sec 时构建
如果在 sdk 21+ 上开发,则可以按照所述 in the android documentation 优化 multidex 构建
android {
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
...
}
play-service
库,而是只编译了 maps
和 locations
并禁用了 multidex
。我觉得差别很大。谢谢+1
公认的答案适用于旧版本的 android studio,其中大多数现在仍然有效。更新 android studio 让它更快一点。不要费心指定堆大小,因为它会随着 Xms 和 Xmx 的增加而自动增加。这是对 VMoptions 的一些修改
在 bin 文件夹中有一个 studio.vmoptions 文件来设置环境配置。在我的情况下,这是 studio64.vmoptions 如果尚未添加以下行,请添加以下行并保存文件。就我而言,我有 8GB RAM。 -Xms4096m -Xmx4096m -XX:MaxPermSize=2048m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8` 启动android studio。转到 File-> Settings-> Build, Execution, Deployment-> Compiler 检查并行编译独立模块在命令行选项中写入:--offline 检查 Make project automatically 检查按需配置
在使用mac的情况下,起初我找不到vmoptions。无论如何,这是一个nice article about how we can change the vmoptions in MAC OSX。在这里引用这篇文章。
打开您的终端并输入以下命令以在 MAC OSX 中打开 vmoptions:
open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions
只需在以下目录中创建一个名为 gradle.properties 的文件:
/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)
将此行添加到文件中:
org.gradle.daemon=true
对我来说,速度现在等于 Eclipse。
来源:https://www.timroes.de/2013/09/12/speed-up-gradle/
如果您从命令行使用 gradle,您可以加快该过程。 IDE 开发人员需要做很多优化。但这只是一个早期版本。
如需了解更多信息,请阅读 this discussion 与一些开发人员一起了解 g+。
如果有人正在处理一个通过 Subversion 同步的项目并且这种情况仍在发生,我认为这会减慢 Android Studio 中的工作流程。例如,如果它在以下情况下工作非常缓慢:在类、xml 等中滚动,而我的应用程序仍在我的设备上运行。
转到 Preferences 中的 Version Control,然后从 Subversion 设置为 None。
Android Studio 2.3 之后更新
所有答案都很棒,我鼓励将这些方法与这个一起使用以提高构建速度。
在 2016 年 9 月发布 android 2.2 之后,Android 发布了实验性构建缓存功能以加快 gradle
构建性能,该功能现已从 Android Studio 2.3 Canary 正式发布。 (Official Release note)
它引入了一个新的构建缓存功能,默认启用,可以通过存储和重用在相同或不同 Android 的先前构建中创建的文件/目录来加快构建时间(包括完整构建、增量构建和即时运行)项目。
如何使用:
在您的 gradle.properties
文件中添加以下行
android.enableBuildCache = true
# Set to true or false to enable or disable the build cache. If this parameter is not set, the build cache is enable by default.
清理缓存:
有一个名为 cleanBuildCache 的新 Gradle 任务可以让您更轻松地清理构建缓存。您可以通过在终端中键入以下内容来使用它:./gradlew cleanBuildCache
或者您可以通过删除存储在位置 C:\Users\
更改此设置后,我的编译持续时间 10 分钟更改为 ~10 秒。
步骤1:
Settings(ctrl+Alt+S) -> Build,Execution,Deployment -> Compiler -> 在命令行选项框中输入“--offline”。
第2步:
选中“并行编译独立模块”复选框。 & 单击应用 -> 确定
https://i.stack.imgur.com/gjRRV.png
参考 - https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio
坏处:
您将无法下载 build.gradle 文件中标识的最新版本的依赖项。它运行得更快,因为它使用了这些导入库的缓存快照。
重要提示:部署应用程序时,请删除此设置并使用最新版本的依赖项进行构建。
解决了我的问题
文件 -> 设置 -> 构建、执行、部署 -> 构建工具 -> Gradle -> 离线工作
Gradle 构建从 8 分钟缩短到 3 秒。
以下是帮助这位初级 Android 程序员(多年前曾是专业程序员)加速 Android Studio 2.2 的原因。我知道这是一个重复,但是,只是在一个地方总结。
初始构建仍然可能非常缓慢,但现在正在运行的应用程序的重新启动通常是可以容忍的。我使用的是次优 PC:AMD 四核 A8-7410 CPU、8MB RAM、非 SSD HD、Win 10。(而且,这是我第一次在 Stack Overflow 上发帖……;)
在设置-> 分级:
是的“离线工作”(这可能是最重要的设置)。
在设置-> 编译器中:
是的“并行编译独立模块”(不确定这是否确实有助于利用多核 CPU)。
在 GRADLE 脚本中,“build.gradle(模块:app)”:
defaultConfig {
...
// keep min high so that restarted apps can be hotswapped...obviously, this is hugely faster.
minSdkVersion 14
...
// enabling multidex support...does make big difference for me.
multiDexEnabled true
也在 GRADLE 脚本中,“gradle.properties(项目属性)”:
org.gradle.jvmargs=-Xmx3048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true org.gradle.daemon=true
此外,在物理设备而不是模拟器上进行测试对我来说效果很好;立起来的小平板很方便。
只是另一个性能改进提示:
Android Studio 3.0 包含名为 D8 的新 DEX 编译器。
“dex 编译器主要在您的日常应用程序开发中工作,但它直接影响您的应用程序的构建时间、.dex 文件大小和运行时性能。”
“当将新的 D8 编译器与当前的 DX 编译器进行比较时,D8 编译速度更快,输出更小的 .dex 文件,同时具有相同或更好的应用运行时性能。”
D8 是可选的 - 使用它我们必须把它放到项目的 gradle.properties
android.enableD8=true
更多信息:https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
PS。它使我的构建时间缩短了大约 30%。
这个设置对我来说真的很快(大约 2 秒构建)
构建.gradle
android {
dexOptions {
incremental true
preDexLibraries = false
jumboMode = false
maxProcessCount 4
javaMaxHeapSize "6g"
}
}
gradle.properties
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx8192M
我的电脑:
CPU Intel(R) Pentium(R) CPU G2030 @ 3.00GHz, 3000 Mhz, 2 procesadores principales, 2 procesadores lógicos
x64
微软视窗 7 专业版
(RAM) 16,0 GB
项目文件 - 全部位于本地高清
请按照以下步骤操作。
启用离线模式:请检查下面的打印屏幕。 https://i.stack.imgur.com/RF9uG.png 启用即时运行:请检查下面的打印屏幕。 https://i.stack.imgur.com/mvHKJ.png 如果您想了解更多关于即时运行的信息,请访问 android 开发者网站。
您可以尝试打开 studio 右侧的 gradle 菜单,只组装您更改的模块,然后运行 install 命令。当您按下运行时,它会组装所有内容,而不管您可能对其正在组装的代码所做的任何更改
我远非 Gradle 专家,但我的环境在 .gradle/init.gradle 中有以下行
gradle.projectsLoaded {
rootProject.allprojects {
repositories {
mavenRepo name: 'libs-repo', url: 'http://guest-vm/artifactory/repo'
}
}
}
但是我不知道为什么那条线在那里,但是我尝试更改为
gradle.projectsLoaded {
rootProject.allprojects {
repositories {
mavenCentral()
}
}
}
现在我终于可以不用对 Android Studio 和 Gradle buildind 方案发誓了。
在我们的具体案例中,问题是由于使用了 retrolambda 插件,它强制所有项目和子项目在我们每次尝试启动应用程序时重新编译,即使我们的核心模块中没有更改任何代码。
删除retrolamba 为我们修复了它。希望它可以帮助某人。
先试试这个。这是我的个人经历。
我有同样的问题。我所做的只是永久禁用防病毒软件(我的是 Avast Security 2015)。禁用杀毒软件后,一切顺利。 gradle 成功完成。从现在开始,gradle 将在几秒钟内完成(只需 5-10 秒)。
嗨,我知道这是非常晚的答案,但也许可以帮助我正在使用的人
compile 'com.android.support:support-v4:23.1.1'
在我的应用程序 Gradle 依赖项中,但在我的一个库中是
compile 'com.android.support:support-v4:23.0.1'
全部更改为最新版本后,我的问题解决了。
遵循这些步骤将使其速度提高 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 中检查此选项
https://i.stack.imgur.com/1y4t4.png
使用这个 sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386
Android Studio fails to build new project, timed out while wating for slave aapt process
一个微不足道的更改(到资源 xml)仍然需要 10 分钟。正如@rivare 在他的回答中所说,命令行构建速度更快(将其缩短到 15 秒)。这里有一些步骤至少可以从 Windows 的命令行快速构建一个简单的构建。
转到您的项目根目录(gradlew.bat 所在的位置): cd c:\android\MaskActivity 执行构建: gradlew assembleDebug 直接从手机中卸载 apk(将其拖动卸载)。构建完成后,使用 Windows 任务管理器终止 BIG java 进程。
或者,如果您的 Windows 机器上有 unix 工具:
ps
显示“pid”:
kill -9 <pid>
现在安装你的apk: adb -d install C:\Android\MaskActivity\app\build\outputs\apk\app-debug.apk
根据android documentation,在app模块的gradle文件中添加这个。
android {
...
dexOptions {
preDexLibraries true
maxProcessCount 8
}
}
在低配置机器上运行 Android 环境。
关闭浏览器中不必要的 Web 选项卡 对于防病毒用户,排除自动生成的构建文件夹 Android Studio 有 1.2 Gb 默认堆可以减少到 512 MB 帮助 > 编辑自定义 VM 选项 studio.vmoptions -Xmx512m 布局性能将加快对于 Gradle Android Studio Mkae 的核心组件之一肯定像现在一样 3.0beta 是最新的
以下提示可能会影响代码质量,因此请谨慎使用:
Studio 包含电源安全模式,打开时它将关闭 lint、代码完成等后台操作。您可以在需要时手动运行 lintcheck ./gradlew lint 大多数使用 Android 仿真器平均消耗 2 GB RAM,因此如果可能,请使用实际的 Android 设备,这将减少您计算机上的资源负载。或者,您可以减少模拟器的 RAM,它会自动减少计算机上的虚拟内存消耗。您可以在虚拟设备配置和高级设置中找到它。 Gradle 离线模式是带宽受限用户禁用下载构建依赖项的功能。它将减少后台操作,这将有助于提高 Android Studio 的性能。 Android Studio 提供了并行编译多个模块的优化。在低 RAM 机器上,此功能可能会对性能产生负面影响。您可以在编译器设置对话框中禁用它。
我受够了本地机器上缓慢构建的 android。我解决这个问题的方法是在 AWS 上启动一台高端机器并将代码从我的本地同步到机器并在那里编译。
我看到性能立即提高,并且我的本地系统从 CPU hog 中拯救出来。查看我为帮助开发人员加快终端速度而创建的此工具 https://stormyapp.com
dependencies {compile 'com.android.support:support-v4:21.0.+'}
是一个缓慢的解决方案?不确定