Building and running app via Gradle and Android Studio is slower than via Eclipse
我有一个多项目(~10个模块),每次建筑大约需要20-30秒。 当我在Android Studio中按Run时,我必须每次都等待重建应用程序,这非常慢。
是否可以在Android Studio中自动化构建过程? 或者您对如何更快地完成此过程有任何建议?
在Eclipse中,由于自动构建,在模拟器上运行相同的项目大约需要3-5秒。
这是我的build.gradle文件(app模块):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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和大量的ram可能比以下几点的影响更大。
工具版本
提高构建性能是开发团队的首要任务,因此请确保您使用的是最新的Gradle和Android Gradle插件。
配置文件
在任何适用的目录中创建名为
-
/home/ (Linux)/.gradle/ -
/Users/ (Mac)/.gradle/ -
C:\Users\ (Windows)\.gradle
附加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # 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 |
如果将它们放在
IDE设置
可以从IDE设置GUI调整Gradle-IntelliJ集成。启用"离线工作"(从下面的yava检查答案)将禁用每个"同步gradle文件"上的实际网络请求。
原生多语言
apk构建的最慢步骤之一是将java字节码转换为单个dex文件。启用本机multidex(仅适用于调试版本的minSdk 21)将有助于工具减少工作量(请参阅下面的Aksel Willgert的答案)。
依赖
首选
在mavenCentral,jCenter上搜索aar包或使用jitpack.io从github构建任何库。如果您不编辑依赖项库的源代码,则不应每次使用项目源构建它。
杀毒软件
考虑从防病毒扫描中排除项目和缓存文件。这显然是与安全的权衡(不要在家里试试!)。但是如果你在分支机构之间切换很多,那么防病毒软件会在允许gradle进程使用它之前重新扫描文件,这会减慢构建时间(特别是带有gradle文件和索引任务的AndroidStudio同步项目)。测量构建时间并在启用和未启用防病毒的情况下处理CPU,以查看它是否相关。
分析构建
Gradle内置了对概要分析项目的支持。不同的项目使用插件和自定义脚本的不同组合。使用
您可以忽略gradle update-to-date检查。
对于运行Android Studio 1.5的Windows:转到
从~30 +秒下降到~3秒
到处搜索,最终找到了适合我们的解决方案。启用并行构建(在OSX:
Gradle and Android Studio way slower to build than Eclipse from androiddev
我最近买了一台新的SSD,从Windows转到Linux。我的构建时间现在快了一个数量级,不再烦人。
虽然它没有直接回答你的问题,为什么它比eclipse慢,但它表明这个过程是磁盘限制的,升级到SSD可能是一个(有点贵)的解决方案。我猜测会有人在谷歌上搜索问题并在此结束,他们可能会欣赏我的经历。
如果使用谷歌播放服务,根据您需要的库而不是整个blob可以使事情更快。
如果您只需要地图,请使用:
1 | compile 'com.google.android.gms:play-services-maps:6.5.+' |
代替:
1 | compile 'com.google.android.gms:play-services:6.5.+' |
后者将20k方法(参见博客)引入类路径,这可能会使总方法计数超过64k。
即使对于调试版本,这也会强制使用proguard或multidex。对于我的一个项目,我有以下构建时间
- multidex build(with supportlibrary)~40sec
- proguard build~20sec
- 方法限制<64k~5sec时构建
如果在sdk 21+上开发,可以优化android文档中所述的multidex构建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 } } ... } |
在Android Studio 3.2.1中加速Gradle构建
您是否觉得等待在Android Studio中完成构建几分钟?我也是。而且这很烦人。
幸运的是,有几种方法可以用来改善这一点。 Android使用Gradle进行构建。最新版本4.6与以前的版本相比具有巨大的性能提升(有关详细信息,请参阅发行说明)。
第1步:更新Gradle版本
更简单的方法是转到:打开模块设置(您的项目)>项目结构
UPDATE
更改为Gradle版本:4.6
和
更改为Android插件版本:3.2.1
从https://services.gradle.org/distributions/gradle-4.6-all.zip下载Gradle Release分发版
并将其复制到Gradle文件夹:
最后一步是在设置> Gradle中添加您的描述
不要忘记单击"应用"以保存更改。
步骤2:为项目启用脱机模式,Gradle守护程序和并行构建
离线模式告诉Gradle忽略更新至今的检查。 Gradle每次都要求依赖,并且使用此选项使其只使用计算机上已有的依赖项。
从android studio设置转到Gradle,然后单击"脱机工作"框。
下一步是为项目启用Gradle守护程序和并行构建。并行构建将使您的项目具有多个模块(Gradle中的多项目构建)并行构建,这将使大型或模块化项目的构建更快。
这些设置可以通过修改Gradle scripts目录中名为gradle.properties的文件(即?/ .gradle / gradle.properties)来启用。其中一些选项(例如并行的Complie模块)可以从Android Studio获得,也可以通过默认情况下,但将它们放在gradle.properties文件中将在从终端构建时启用它们,并确保您的同事将使用相同的设置。但是如果你在一个团队工作,有时你不能提交这些东西。
1 2 3 4 5 | # 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步:启用增量设计和调整内存设置
您可以通过启用增量dexing来加速构建。在模块的构建文件中:
将此选项添加到您的android块:
1 2 3 | dexOptions { incremental true } |
在该dexOptions块中,您还可以指定dex进程的堆大小,例如:
1 2 3 4 | dexOptions { incremental true javaMaxHeapSize"12g" } |
其中"12g"是12GB的内存。有关这方面的更多信息,请访问google.github.io/android-gradle-dsl/current/
您还可以在设置文件中配置Gradle参数,例如如果您有一个大型项目,请增加最大堆大小:
1 2 3 4 | # 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,以查看它是否相关。
我希望这有帮助。如果您有任何问题或其他提示可以提高构建性能,请发表评论。
有用的链接
好。
接受的答案是旧版本的android studio,其中大部分仍在使用。更新android studio让它变得更快一点。不要指定堆大小,因为它会随着Xms和Xmx的增加而自动增加。这是VMoptions的一些修改
在bin文件夹中有一个studio.vmoptions文件来设置环境配置。在我的例子中,这是studio64.vmoptions
如果尚未添加以下行,请添加以下行并保存文件。在我的情况下,我有8GB的RAM。
1 2 3 4 5 6 7 | -Xms4096m -Xmx4096m -XX:MaxPermSize=2048m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8` |
启动android studio。转到文件 - >设置 - >构建,执行,部署 - >编译器
- 并行检查编译独立模块
- 在命令行选项中写:--offline
- 选中自动生成项目
- 检查按需配置
在使用mac的情况下,起初我找不到vmoptions。无论如何,这是一篇很好的文章,关于我们如何改变MAC OSX中的vmoptions。在这里引用这篇文章。
打开终端并输入此命令以打开MAC OSX中的vmoptions:
1 | open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions |
只需在以下目录中创建名为gradle.properties的文件:
1 2 3 | /home/<username>/.gradle/ (Linux) /Users/<username>/.gradle/ (Mac) C:\Users\<username>\.gradle (Windows) |
将此行添加到文件中:
1 | org.gradle.daemon=true |
对我来说,速度现在等于Eclipse。
资料来源:https://www.timroes.de/2013/09/12/speed-up-gradle/
如果从命令行使用gradle,则可以使进程更快。 IDE开发人员需要做很多优化。但它只是一个早期版本。
有关更多信息,请阅读g +与一些开发人员的讨论。
如果有人正在使用通过Subversion同步的项目并且这仍在发生,我认为这会减慢Android Studio中的工作流程。例如,如果它在以下情况下工作非常慢:在类,xml等中滚动,而我的应用程序仍然在我的设备上运行。
- 转到Preferences上的Version Control,然后从Subversion设置为None。
在Android Studio 2.3之后更新
所有答案都很棒,我鼓励使用这些方法来提高构建速度。
在2016年9月发布Android 2.2之后,Android发布了实验性构建缓存功能,以加快
它引入了一个新的构建缓存功能,默认情况下启用,可以通过存储和重用在相同或不同Android的先前版本中创建的文件/目录来加快构建时间(包括完整构建,增量构建和即时运行)项目。
如何使用:
在
1 2 | 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 -
或者您可以通过删除位置存储的所有文件来清除Android studio 2.2的缓存
C:\Users\ \.android\build-cache
更改此设置后,我的编译持续时间10分钟更改为~10秒。
步骤1:
Settings(ctrl+Alt+S) ->
Build,Execution,Deployment ->
Compiler ->
type"
--offline " in command-line Options box.
第2步:
check the"Compile independent modules in parallel" checkbox.
& click Apply -> OK
参考 - https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio
坏处:
您将无法下载build.gradle文件中标识的最新版本的依赖项。它运行得更快,因为它使用这些导入库的缓存快照。
重要说明:部署应用程序时,请删除此设置&amp;使用最新版本的依赖项构建。
解决了我的问题
File -> Settings -> Build, Execution, Deployment -> Build Tools ->
Gradle -> Offline work
Gradle构建从8分钟到3秒。
只是另一个性能改进提示:
Android Studio 3.0包含名为D8的新DEX编译器。
"dex编译器主要在日常应用程序开发中工作,但它直接影响应用程序的构建时间,.dex文件大小和运行时性能。"
"当将新的D8编译器与当前的DX编译器进行比较时,D8可以更快地编译并输出更小的.dex文件,同时具有相同或更好的应用程序运行时性能。"
D8是可选的 - 使用它我们必须放入项目的gradle.properties
1 | android.enableD8=true |
更多信息:https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
PS。它使我的构建时间缩短了大约30%。
这是Android程序员(多年前的前专业程序员)开始加速Android Studio 2.2的原因。我知道这是一个重复,但是,只是在一个地方总结。
初始构建仍然可能非常缓慢,但现在通常可以非常容忍重新启动正在运行的应用程序。我使用的是次优PC:AMD四核A8-7410 CPU,8MB RAM,非SSD HD,Win 10.(而且,这是我的第一个Stack Overflow发布....;)
IN SETTINGS - > GRADLE:
是的"离线工作"(这可能是最重要的设置)。
在设置 - >编译器:
是"并行编译独立模块"(不确定这是否确实有助于利用多核CPU)。
在GRADLE SCRIPTS中,"build.gradle(Module:app)":
1 2 3 4 5 6 7 | 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 SCRIPTS,"gradle.properties(项目属性)":
org.gradle.jvmargs = -Xmx3048m -XX:MaxPermSize = 512m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8
org.gradle.parallel =真
org.gradle.daemon =真
此外,在物理设备而不是模拟器上进行测试对我来说效果很好;一个站立的小平板电脑很方便。
请按照以下步骤操作。
启用离线模式:请检查以下打印屏幕。
https://i.stack.imgur.com/RF9uG.png
启用即时运行:请检查下面的打印屏幕。
https://i.stack.imgur.com/mvHKJ.png
如果您想了解有关即时运行的更多信息,请访问android开发者网站。
您可以尝试打开工作室右侧的gradle菜单,只组装已更改的模块,然后运行install命令。按下运行时,无论您对组装的代码所做的任何更改,它都会组装所有内容
这个设置对我来说非常快
(大约2秒钟的构建)
的build.gradle
1 2 3 4 5 6 7 8 9 10 | android { dexOptions { incremental true preDexLibraries = false jumboMode = false maxProcessCount 4 javaMaxHeapSize"6g" } } |
gradle.properties
1 2 3 | org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx8192M |
我的电脑:
-
CPU Intel(R)Pentium(R)CPU G2030 @ 3.00GHz,3000 Mhz,2个处理器
principales,2procesadoresógicos - 64位
- Microsoft Windows 7专业版
- (RAM)16,0 GB
项目文件
- 所有位于当地高清
我远不是Gradle的专家,但我的环境在.gradle / init.gradle中有以下几行
1 2 3 4 5 6 7 | gradle.projectsLoaded { rootProject.allprojects { repositories { mavenRepo name: 'libs-repo', url: 'http://guest-vm/artifactory/repo' } } } |
然而我不知道为什么那条线在那里,但我尝试改变
1 2 3 4 5 6 7 | gradle.projectsLoaded { rootProject.allprojects { repositories { mavenCentral() } } } |
现在我终于可以在不咒骂Android Studio&amp; Gradle buildind计划。
在我们的具体情况下,问题是由于拥有了retrolambda插件,即使我们的核心模块中没有更改任何代码,每次我们尝试启动应用程序时都会强制所有项目和子项目重新编译。
删除retrolamba为我们修复了它。希望它可以帮助某人。
嗨,我知道这是非常非常晚的答案,但也许可以帮助别人
就我而言,我正在使用
1 | compile 'com.android.support:support-v4:23.1.1' |
在我的应用程序Gradle依赖
但在我的一个图书馆里
1 | compile 'com.android.support:support-v4:23.0.1' |
更改所有最新版本后,我的问题解决了。
遵循这些步骤将使其快10倍并缩短构建时间90%
首先在以下目录中创建名为gradle.properties的文件:
1 2 3 | /home/<username>/.gradle/ (Linux) /Users/<username>/.gradle/ (Mac) C:\Users\<username>\.gradle (Windows) |
将此行添加到文件中:
1 2 | org.gradle.daemon=true org.gradle.parallel=true |
并在Android Studio中查看此选项
用这个
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libncurses5:i386 libstdc ++ 6:i386 zlib1g:i386
Android Studio无法构建新项目,在使用slave aapt进程时超时
一个微不足道的变化(到一个resoruce xml)仍然需要10分钟。
正如@rivare在他的回答中所说的那样,命令行构建变得更快(将其缩短到15秒)。
以下是一些步骤,至少可以从Windows的命令行快速进行简单的构建。
转到项目根目录(gradlew.bat所在的位置):
cd c: android MaskActivity
执行构建:
gradlew assembleDebug
直接从手机上卸载apk(将其拖动到卸载)。
构建完成后,使用Windows终止BIG java进程
任务管理器。
或者如果您的Windows机器上有unix工具:
1 | ps |
显示"pid":
1 | kill -9 <pid> |
现在安装你的apk:
adb -d install C: Android MaskActivity app build outputs apk app-debug.apk
根据android文档,将其添加到app模块的gradle文件中。
1 2 3 4 5 6 7 | android { ... dexOptions { preDexLibraries true maxProcessCount 8 } } |
在低配置机器上运行Android环境。
Android工作室有1.2 Gb默认堆可以减少到512 MB
帮助>编辑自定义VM选项
studio.vmoptions
-Xmx512m
布局性能将加快
对于Gradle,Android工作室Mkae的核心组件之一肯定
就像现在3.0beta是最新的一个
以下提示可能会影响代码质量,因此请谨慎使用:
Studio打开电源安全模式,它将关闭lint,代码补充等后台操作。
您可以在需要时手动运行lintcheck ./gradlew lint
大多数人平均使用Android模拟器消耗2 GB RAM,因此如果可能的话使用实际的Android设备,这将减少您的计算机上的资源负担。或者,您可以减少仿真器的RAM,它将自动减少计算机上的虚拟内存消耗。您可以在虚拟设备配置和高级设置中找到它。
Gradle offline模式是带宽受限用户禁用下载构建依赖项的功能。它将减少后台操作,这将有助于提高Android studio的性能。
Android studio提供了并行编译多个模块的优化。在低RAM机器上,此功能可能会对性能产生负面影响。您可以在编译器设置对话框中将其禁用。
先试试吧。这是我个人的经历。
我有同样的问题。我所做的只是永久禁用防病毒(我的是Avast Security 2015)。在禁用防病毒之后,事情进展顺利。 gradle成功完成。
从现在开始,在几秒钟内,平板即将完成(仅需5-10秒)。