通过Gradle和Android Studio构建和运行应用程序比通过Eclipse慢

我有一个多项目(大约10个模块),每次建造大约需要20-30秒。当我在Android Studio中按下Run键时,我每次都要等待重新构建应用程序,这非常缓慢。

是否有可能在Android Studio中自动化构建过程?或者你有什么建议可以加快这个过程吗?

在Eclipse中,由于自动构建,在模拟器上运行相同的项目大约需要3-5秒。

这是我的身材。Gradle文件(app模块):

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
}
}
225974 次浏览

如果你从命令行使用gradle,你可以让这个过程更快。IDE开发人员有很多优化工作要做。但这只是一个早期版本。

有关更多信息,请阅读g+上的这个讨论和一些开发人员。

到处寻找,终于找到了一个适合我们的解决方案。启用并行构建(在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和大量内存可能比下面的点加起来影响更大。

工具版本

提高构建性能是开发团队的首要任务,因此请确保您使用的是最新的GradleAndroid Gradle插件

配置文件

在任何适用的目录中创建一个名为gradle.properties的文件:

  • /home/<username>/.gradle/ (Linux)
  • /Users/<username>/.gradle/ (Mac)
  • C:\Users\<username>\.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文件”上的真实网络请求。

IDE settings

本机multi-dex

apk构建中最慢的步骤之一是将java字节码转换为单个dex文件。启用本地multidex(仅用于调试版本的minSdk 21)将帮助工具减少工作量(检查下面Aksel Willgert中的答案)。

依赖关系

优先选择@aar依赖项而不是库子项目。

mavenCentral上搜索aar包,jCenter或使用jitpack.io从github构建任何库。如果你没有编辑依赖库的源代码,你不应该每次都用你的项目源代码来构建它。

杀毒

考虑从防病毒扫描中排除项目和缓存文件。这显然是一个与安全的权衡(不要在家里尝试!)。但是如果你在分支之间切换很多,那么反病毒会在允许gradle进程使用它之前重新扫描文件,这会减慢构建时间(特别是AndroidStudio同步项目与gradle文件和索引任务)。测量构建时间和进程CPU是否启用防病毒,以查看两者是否相关。

分析构建

Gradle内置对分析项目的支持。不同的项目使用不同的插件和自定义脚本组合。使用--profile将有助于发现瓶颈。

我远不是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建筑方案。

只需创建一个名为gradle的文件。属性:

/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/

我最近买了一个新的固态硬盘,从Windows换成了Linux。我的构建时间现在快了一个数量级,不再烦人了。

虽然它没有直接回答为什么它比eclipse慢的问题,但它表明该进程受磁盘限制,升级到SSD可能是一个(有点昂贵的)解决方案。我猜会有人在谷歌上搜索这个问题,最后来到这里,他们可能会欣赏我的经验。

你可以忽略gradle update-to-date检查。

enter image description here

对于运行Android Studio 1.5的Windows:转到File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)

从~30+秒降低到~3秒

如果使用谷歌播放服务,只依赖于你需要的库而不是整个blob可以使事情更快。

如果你只需要地图,使用:

compile 'com.google.android.gms:play-services-maps:6.5.+'

而不是:

compile 'com.google.android.gms:play-services:6.5.+'

后者将20k方法(见博客)带入类路径,这可能会使总方法计数超过64k。

这将强制使用proguard或multidex,即使是调试版本。对于我的一个项目,我有以下的构建时间

  • Multidex构建(带支持库)~40秒
  • 保护建造~20秒
  • 建立时方法限制<64 k ~ 5秒

如果在sdk 21+上开发,就有可能优化multidex构建在android文档中

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,其中大多数现在仍然有效。更新android studio让它更快了一点。不要费心指定堆大小,因为它会随着Xms和Xmx的增加而自动增加。下面是对VMoptions的一些修改

  1. bin文件夹中有一个工作室。Vmoptions文件设置环境配置。在我的例子中,这是studio64.vmoptions 如果还没有添加以下行,则添加它们并保存文件。在我的例子中,我有8GB RAM

    -Xms4096m
    -Xmx4096m
    -XX:MaxPermSize=2048m
    -XX:+CMSClassUnloadingEnabled
    -XX:+CMSPermGenSweepingEnabled
    -XX:+HeapDumpOnOutOfMemoryError
    -Dfile.encoding=utf-8`
    
  2. Start android studio. Go to File-> Settings-> Build, Execution, Deployment-> Compiler

    • Check compile independent modules in parallel
    • In command-line Options write: --offline
    • Check Make project automatically
    • Check configure on demand

In case of using mac, at first I couldn't find the vmoptions. Anyway, here's a nice article about how we can change the vmoptions in MAC OSX. Quoting from this article here.

Open your terminal and put this command to open the vmoptions in MAC OSX:

open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions

在我们的特定情况下,问题是由于有retrolambda插件,它迫使所有项目和子项目重新编译每次我们试图启动我们的应用程序,即使我们的核心模块中没有任何代码被改变。

删除retrolamba为我们修复了它。希望它能帮助到别人。

解决我的问题

< p > File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Offline work < / p >

Gradle的构建从8分钟缩短到3秒。

如果有人正在开发一个通过Subversion进行同步的项目,而且这种情况还在发生,我认为这会减慢Android Studio的工作流程。例如,如果它的工作非常缓慢,而:滚动在一个类,xml等,而我的应用程序仍在我的设备上运行。

  • 在首选项中选择版本控制,并将Subversion设置为None.enter image description here

先试试这个。这是我的个人经历。

我也有同样的问题。我所做的只是永久禁用反病毒(我的是Avast Security 2015)。就在禁用防病毒后,事情进展顺利。gradle成功完成了。 从现在开始,gradle在几秒钟内完成(只需要5-10秒)。< / p >
嗨,我知道这是一个非常非常晚的回答,但也许可以帮助别人 在我的情况下,我使用

compile 'com.android.support:support-v4:23.1.1'

在我的应用程序Gradle依赖
但在我的一个库中,它是

 compile 'com.android.support:support-v4:23.0.1'

所有更改到最新版本后,我的问题解决了。

更改此设置后,我的编译持续时间10分钟更改为~10秒。

步骤1:

设置(ctrl + Alt + S) - >

构建、执行部署- >

编译器- >

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

步骤2:

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

,单击应用->确定

enter image description here

引用- https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio

劣势:

您将无法下拉构建中确定的依赖项的最新版本。gradle文件。它运行得更快,因为它使用了这些导入库的缓存快照。

重要提示:当你部署应用程序时删除这个设置&使用最新版本的依赖项进行构建。

加速Gradle构建在Android Studio 3.2.1

你是否觉得你在Android Studio中需要等待几分钟才能完成构建?我也是。这很烦人。 幸运的是,您可以使用一些方法来改善这一点。Android使用Gradle进行构建。最新版本是4.6,与以前的版本相比有了巨大的性能提升(详情请参阅发布说明) 更新Gradle版本 一个更简单的方法是:打开模块设置(你的项目)>项目结构

enter image description here

更新

更改为Gradle版本:4.6 而且 更改为Android插件版本:3.2.1

enter image description here

下载Gradle Release distributive from https://services.gradle.org/distributions/gradle-4.6-all.zip 并复制到Gradle文件夹:

enter image description here

最后一步是在设置> Gradle中添加您的发行版

enter image description here

不要忘记单击Apply以保存更改。

为项目启用离线模式,Gradle守护进程和并行构建 离线模式告诉Gradle忽略update-to-date检查。Gradle每次都要求依赖项,有了这个选项,它就只使用机器上已经存在的依赖项。 从android studio settings转到Gradle,在Offline work框中单击

enter image description here

  1. 从android studio Setting进入Compiler,在命令行框中添加“- offline”,然后单击“并行编译独立模块”。

enter image description here

下一步是为您的项目启用Gradle守护进程和并行构建。并行构建将使您的项目具有多个模块(Gradle中的多项目构建)并行构建,这将使大型或模块化项目更快地构建。

enter image description here

这些设置可以通过修改一个名为gradle的文件来启用。属性在Gradle脚本目录(即、~ / .gradle / gradle.properties)。其中一些选项(例如并行编译模块)可以从Android Studio中获得,默认情况下也可以在那里启用,但将它们放在gradle中。属性文件将在从终端构建时启用它们,并确保您的同事将使用相同的设置。但如果你在一个团队中工作,有时你不能承诺这些事情。

# 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 Daemon在默认情况下是不启用的,但是建议在开发人员的机器上启用它(但是在持续集成服务器上禁用它)。关于此模式的常见问题可以在这里找到https://docs.gradle.org/current/userguide/gradle_daemon.html。 并行构建设置对于某些项目可能不安全。要求是你的所有模块都必须解耦,否则你的构建可能会失败(详情请参阅http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects)

步骤3:启用增量设计和调整内存设置 您可以通过启用增量索引来加快构建的速度。在模块的构建文件中:

enter image description here

添加这个选项到你的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进程使用它之前重新扫描文件,这会减慢构建时间(特别是Android Studio同步项目与gradle文件和索引任务)。测量构建时间和进程CPU是否启用防病毒,以查看两者是否相关。 我希望这能有所帮助。如果您有任何问题或其他提高构建性能的技巧,请留下评论

有用的链接

按照这些步骤将使其速度提高10倍,并将构建时间减少90%

首先创建一个名为gradle的文件。属性:

/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

这个设置对我来说太快了 (大约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处理器 原理,2处理器lógicos
  • x64
  • 微软Windows 7专业版
  • (ram) 16,0 gb
< p > 项目文件 < br > -所有位于本地HD

Android Studio 2.3后更新

所有的答案都很棒,我鼓励使用这些方法来提高构建速度。

在2016年9月android 2.2发布后,android发布了实验构建缓存功能,以加速gradle构建性能,这现在是android Studio 2.3 Canary的官方功能。(正式发布说明)

它引入了一个新的构建缓存功能,默认情况下是启用的,可以通过存储和重用在相同或不同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.

清理缓存:

  • 有一个新的Gradle任务叫做cleanBuildCache,你可以更容易地清理构建缓存。您可以在终端中输入以下命令来使用它:

    ./gradlew cleanBuildCache < / p >

  • 或者你可以通过删除所有存储在位置的文件来清除Android studio 2.2的缓存

    C:\Users\<username>\.android\build-cache < / p >

< p >使用这个 Sudo DPKG—add-architecture i386 Sudo apt-get update Sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386

Android Studio无法构建新项目,在等待从apapt进程时超时

请按照以下步骤操作。

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

    https://i.stack.imgur.com/RF9uG.png < / p >

  2. 启用立即运行:请查看打印屏幕下方。

    https://i.stack.imgur.com/mvHKJ.png

    如果你想了解更多关于即时运行的内容,请访问android开发者网站

以下是帮助这个刚开始的Android程序员(几年前曾是专业程序员)加速Android Studio 2.2的方法。我知道这是一个重复,但是,只是总结在一个地方。

初始构建仍然非常缓慢,但现在重新启动运行中的应用程序通常是可以忍受的。我使用的是一台次优PC: AMD四核A8-7410 CPU, 8MB RAM,非ssd HD, Win 10。(这是我第一次在....上发布Stack Overflow;)

在设置-> gradle:

“离线工作”是(这可能是最重要的设置)。

在设置->编译器:

是“并行编译独立模块”(不确定这是否真的有助于利用多核cpu)。

构建在gradle脚本中。”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脚本中。”物业(项目物业)”:

org.gradle。jvmargs=-Xmx3048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

< p > org.gradle.parallel = true org.gradle.daemon = true < / p >

另外,在物理设备上而不是模拟器上进行测试对我来说很好;可以站立的小平板很方便。

微不足道的更改(到资源xml)仍然使用10分钟。 正如@rivare在他的回答中所说,命令行构建要快得多(将此降至15 ) 下面是一些步骤,至少可以从Windows命令行快速进行简单的构建
  1. 到你的项目根目录(gradlew.bat所在的地方):

    android cd c: \ \ MaskActivity < / p >

  2. 执行构建:

    gradlew assembleDebug < / p >

  3. uninstall直接将apk从手机上卸下(拖拽即可卸载)。

  4. 构建完成后,杀了 BIG java进程使用Windows 李Task Manager . < / p > < / >

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

ps

“pid”的值如下所示:

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

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

您可以尝试打开studio右侧的gradle菜单,只组装已更改的模块,然后运行install命令。当你按下运行键时,不管你对它正在组装的代码做了什么改变,它都会组装所有东西

根据安卓系统文档,将其添加到app模块的gradle文件中。

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

在低配置机器上运行Android环境。

  1. 关闭浏览器中多余的网页标签
  2. 对于防病毒用户,请排除自动生成的build文件夹
  3. Android studio有1.2 Gb的默认堆可以减少到512 MB 帮助>编辑自定义虚拟机选项 studio.vmoptions -Xmx512m 布局性能将加快

  4. 对于Gradle来说,Android studio Mkae sure的核心组件之一 就像现在3.0beta是最新的

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

  1. Studio包含电源安全模式时,打开它将关闭后台操作,lint,代码完成等。

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

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

  4. Gradle离线模式是带宽有限的用户禁用构建依赖项下载的功能。减少了后台操作,有助于提高Android studio的性能。

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

这是另一个提高性能的技巧:

Android Studio 3.0包含新的DEX编译器D8。

“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%。

我受够了本地机器上缓慢的android构建。我解决这个问题的方法是在AWS上启动一台高端机器,将我本地的代码重新同步到机器上,然后在那里编译。

我看到了性能的立即提升,并且我的本地系统不再占用CPU。看看我创建的这个工具来帮助开发人员加速他们的终端https://stormyapp.com