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

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插件。

配置文件

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

  • /home//.gradle/(Linux)
  • /Users//.gradle/(Mac)
  • C:\Users\\.gradle(Windows)

附加:

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

如果将它们放在projectRoot\gradle.properties,则Gradle属性在本地工作;如果将它们放在user_home\.gradle\gradle.properties,则全局属性在全局工作。如果从控制台或直接从构思运行gradle任务,则应用属性:

IDE设置

可以从IDE设置GUI调整Gradle-IntelliJ集成。启用"离线工作"(从下面的yava检查答案)将禁用每个"同步gradle文件"上的实际网络请求。

IDE settings

原生多语言

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

依赖

首选@aar依赖于库子项目。

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

杀毒软件

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

分析构建

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


您可以忽略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秒


到处搜索,最终找到了适合我们的解决方案。启用并行构建(在OSX:preferences -> compiler -> gradle ->"Compile independent modules in parallel"上)并启用'自动生成项目'将其从约1分钟缩短到约20秒。感谢/ u / Covalence。

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版本
更简单的方法是转到:打开模块设置(您的项目)>项目结构

enter image description here

UPDATE

更改为Gradle版本:4.6

更改为Android插件版本:3.2.1

enter image description here

从https://services.gradle.org/distributions/gradle-4.6-all.zip下载Gradle Release分发版
并将其复制到Gradle文件夹:

enter image description here

最后一步是在设置> Gradle中添加您的描述

enter image description here

不要忘记单击"应用"以保存更改。

步骤2:为项目启用脱机模式,Gradle守护程序和并行构建
离线模式告诉Gradle忽略更新至今的检查。 Gradle每次都要求依赖,并且使用此选项使其只使用计算机上已有的依赖项。
从android studio设置转到Gradle,然后单击"脱机工作"框。

enter image description here

  • 从android studio设置转到Compiler并在命令行框中添加" - offline",然后单击并行编译独立模块。
  • enter image description here

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

    enter image description here

    这些设置可以通过修改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来加速构建。在模块的构建文件中:

    enter image description here

    将此选项添加到您的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。enter image description here


    在Android Studio 2.3之后更新

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

    在2016年9月发布Android 2.2之后,Android发布了实验性构建缓存功能,以加快gradle构建性能,现在Android Studio 2.3 Canary正式推出。 (官方发行说明)

    它引入了一个新的构建缓存功能,默认情况下启用,可以通过存储和重用在相同或不同Android的先前版本中创建的文件/目录来加快构建时间(包括完整构建,增量构建和即时运行)项目。

    如何使用:

    gradle.properties文件中添加以下行

    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

    enter image description here

    参考 - 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中查看此选项

    enter image description here


    用这个
    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环境。

  • 关闭浏览器中的uncessesory Web选项卡
  • 对于防病毒用户,请排除自动生成的构建文件夹
  • 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秒)。