首页 文章

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

提问于
浏览
442

我有一个多项目(~10个模块),每次建筑大约需要20-30秒 . 当我在Android Studio中按Run时,我必须每次都等待重建应用程序,这非常慢 .

是否可以在Android Studio中自动化构建过程?或者您对如何更快地完成此过程有任何建议?

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

这是我的build.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
    }
}

27 回答

  • 0

    遵循这些步骤将使其快10倍并缩短构建时间90%

    首先在以下目录中创建名为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中查看此选项

  • 432

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

    • 转到“首选项”的“版本控制”,并从“Subversion”设置为“无” .
  • 0

    只需在以下目录中创建名为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/

  • 12

    只是另一个性能改进提示:

    Android Studio 3.0 包括名为D8的新DEX编译器 .

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

  • 18

    如果从命令行使用gradle,则可以加快进程 . IDE开发人员需要做很多优化 . 但它只是一个早期版本 .

    有关更多信息,请阅读this discussion以及某些开发人员 .

  • 0

    trivial 更改(对于resoruce xml)仍然需要 10 minutes . 正如 @rivare 在他的回答中所说的那样,命令行构建变得更快(将其归结为 15 seconds ) .
    以下是一些步骤,至少可以从Windows的命令行快速进行简单的构建 .

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

    cd c:\ android \ MaskActivity

    • 执行 build

    gradlew assembleDebug

    • uninstall 直接从手机上的apk(拖动到卸载) .

    • 构建完成后, kill 使用Windows任务管理器的BIG java进程 .

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

    ps
    

    显示“pid”:

    kill -9 <pid>
    
    • 现在 install 你的apk:

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

  • 0

    到处搜索,最终找到了适合我们的解决方案 . 启用并行构建(On 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/

  • 16

    Speed Up Gradle Build In Android Studio 3.2.1

    您是否觉得等待在Android Studio中完成构建几分钟?我也是 . 而且这很烦人 . 幸运的是,有几种方法可以用来改善这一点 . Android使用Gradle进行构建 . 最新版本4.6与以前的版本相比具有巨大的性能提升(有关详细信息,请参阅发行说明) .

    Step 1: 更新Gradle版本更简单的方法是转到:打开模块设置(您的项目)>项目结构

    UPDATE

    更改为 Gradle version: 4.6 并更改为 Android Plugin Version: 3.2.1

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

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

    不要忘记单击“应用”以保存更改 .

    Step 2: 为项目启用脱机模式,Gradle守护程序和并行构建脱机模式告知Gradle忽略更新到日期检查 . Gradle每次都要求依赖,并且使用此选项使其只使用计算机上已有的依赖项 . 从android studio设置转到Gradle,然后单击“脱机工作”框 .

    • 从android studio转到编译器设置并在命令行框中添加“ - offline”,然后单击并行编译独立模块 .

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

    这些设置可以通过修改Gradle脚本目录中名为gradle.properties的文件(即〜/ .gradle / gradle.properties)来启用 . 其中一些选项(例如并行的Complie模块)可从Android获得Studio也默认启用,但将它们放在gradle.properties文件中将在从终端构建时启用它们,并确保您的同事将使用相同的设置 . 但是如果你在团队中工作,有时候你不能提交这些东西 .

    # 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) .

    Step 3: 启用增量设计和调整内存设置您可以通过启用增量删除来加速构建 . 在模块的构建文件中:

    将此选项添加到您的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 .

    Step 4: 禁用防病毒考虑从防病毒扫描中排除项目和缓存文件 . 这显然是与安全的权衡 . 但是如果你在分支机构之间切换很多,那么防病毒软件会在允许gradle进程使用它之前重新扫描文件,这会减慢构建时间(特别是带有gradle文件和索引任务的Android Studio同步项目) . 测量构建时间并处理启用和未启用防病毒的CPU,以查看它是否相关 . 我希望这有帮助 . 如果您有任何问题或其他提示可以提高构建性能,请发表评论 .

    helpful link

  • 23

    在我们的特定情况下,问题是由于拥有 retrolambda 插件,即使我们的核心模块中没有更改任何代码,每次我们尝试启动应用程序时都会强制重新编译所有项目和子项目 .

    删除 retrolamba 为我们修复了它 . 希望它可以帮到某人 .

  • 1

    To run Android envirorment on low configuration machine.

    • 关闭浏览器中的uncessesory Web选项卡

    • 对于防病毒用户,请排除自动生成的构建文件夹

    • Android工作室有1.2 Gb默认堆可以减少到512 MB帮助>编辑自定义VM选项studio.vmoptions -Xmx512m布局性能将加快

    • 对于Gradle安卓工作室Mkae的核心组件之一,现在确定3.0beta是最新的

    Below tips can affect the code quality so please use with cautions:

    • Studio包含电源安全模式,当它打开时,它将关闭lint,代码补全等后台操作 .

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

    • 大多数人平均使用Android模拟器消耗2 GB RAM,因此如果可能,请使用实际的Android设备,这样可以减少计算机上的资源负担 . 或者,您可以减少仿真器的RAM,它将自动减少计算机上的虚拟内存消耗 . 您可以在虚拟设备配置和高级设置中找到它 .

    • Gradle脱机模式是带宽受限用户禁用下载构建依赖项的功能 . 它将减少后台操作,这将有助于提高Android studio的性能 .

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

  • 0

    这是开始Android程序员(多年前的专业程序员)加速Android Studio 2.2的原因 . 我知道这是一次重演,但是,只是在一个地方 .

    初始构建仍然可能非常慢,但现在通常非常容忍重新启动正在运行的应用程序 . 我使用的是次优PC:AMD四核A8-7410 CPU,8MB RAM,非SSD HD,Win 10.(而且,这是我的第一个Stack Overflow发布....;)

    IN SETTINGS -> GRADLE:

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

    IN SETTINGS -> COMPILER:

    是“并行编译独立模块”(不确定这是否确实有助于利用多核CPU) .

    IN 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
    

    ALSO IN 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

    Additionally ,在物理设备而不是模拟器上进行测试对我来说效果很好;一个站立的小平板电脑很方便 .

  • 0

    如果使用谷歌播放服务,根据您需要的库而不是整个blob可以使事情更快 .

    如果您只需要 Map ,请使用:

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

    代替:

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

    后者将20k方法(see blog)带入类路径,这可能会使总方法计数超过64k .

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

    • multidex build(with supportlibrary)~40sec

    • proguard build~20sec
      当方法限制<64k~5sec时

    • build

    如果在sdk 21上开发,可以优化multidex版本in the android documentation

    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
            }
        }
        ...
    }
    
  • 1

    先试试吧 . 这是我个人的经历 .

    我有同样的问题 . 我所做的只是永久禁用防病毒(我的是Avast Security 2015) . 在禁用防病毒之后,事情进展顺利 . gradle成功完成 . 从现在开始,在几秒钟内,平板即将完成(仅需5-10秒) .

  • 10

    这个设置对我来说非常快(构建大约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
    

    my PC:

    • CPU英特尔(R)奔腾(R)CPU G2030 @ 3.00GHz,3000 Mhz,2个处理器原理,2个处理器lógicos

    • x64

    • Microsoft Windows 7 Professional

    • (RAM)16,0 GB

    project files

    • 所有位于当地高清
  • 147

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

    Step 1:

    设置(ctrl Alt S) - >构建,执行,部署 - >编译器 - >在命令行选项框中键入“--offline” .

    Step 2:

    选中“并行编译独立模块”复选框 . 然后单击应用 - >确定

    参考 - https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio

    Disadvantage:

    您将无法下载build.gradle文件中标识的最新版本的依赖项 . 它运行得更快,因为它使用这些导入库的缓存快照 .

    Important Note :部署应用程序时,请删除此设置并使用最新版本的依赖项进行构建 .

  • 33

    我远不是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 buildind方案的情况下工作了 .

  • 0

    嗨,我知道这是非常非常晚的答案,但也许可以帮助别人
    在我的情况下,我正在使用

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

    在我的应用程序Gradle依赖
    但在我的一个图书馆里

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

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

  • 1

    解决了我的问题

    文件 - >设置 - >构建,执行,部署 - >构建工具 - > Gradle - >离线工作

    Gradle构建从8分钟到3秒 .

  • 0

    请按照以下步骤操作 .

    • 启用离线模式:请检查以下打印屏幕 .

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

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

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

    如果您想了解有关即时运行的更多信息,请访问android开发者网站 .

  • 7

    我最近买了一台新的SSD,从Windows转到Linux . 我的构建时间现在快了一个数量级,不再烦人 .

    虽然它没有直接回答你的问题,为什么它比eclipse慢,但它表明这个过程是磁盘限制的,升级到SSD可能是一个(有点贵)的解决方案 . 我猜是会有人在谷歌上搜索问题并在此结束,他们可能会欣赏我的经历 .

  • 6

    您可以尝试打开工作室右侧的gradle菜单,只组装已更改的模块,然后运行install命令 . 按下运行时,无论您对正在组装的代码所做的任何更改如何,它都会组装所有内容

  • 5

    接受的答案是旧版本的android studio,其中大部分仍在使用 . 更新android studio使它更快一点 . 不要费心指定堆大小,因为它会随着Xms和Xmx的增加而自动增加 . 这是VMoptions的一些修改

    • 在bin文件夹中有一个studio.vmoptions文件来设置环境配置 . 在我的例子中,这是studio64.vmoptions如果它们尚未添加,请添加以下行并保存文件 . 在我的情况下,我有8GB的RAM .
    -Xms4096m
    -Xmx4096m
    -XX:MaxPermSize=2048m
    -XX:+CMSClassUnloadingEnabled
    -XX:+CMSPermGenSweepingEnabled 
    -XX:+HeapDumpOnOutOfMemoryError
    -Dfile.encoding=utf-8`
    
    • 启动android studio . 转到文件 - >设置 - >构建,执行,部署 - >编译器

    • 并行检查编译独立模块

    • 在命令行选项中写:--offline

    • 检查自动生成项目

    • 检查按需配置

    在使用mac的情况下,起初我不能 trivial 一个nice article about how we can change the vmoptions in MAC OSX . 引用这篇文章 .

    打开终端并输入此命令以打开MAC OSX中的vmoptions:

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

    使用这个sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libncurses5:i386 libstdc 6:i386 zlib1g:i386

    Android Studio fails to build new project, timed out while wating for slave aapt process

  • 0

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

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

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

  • 3

    在Android Studio 2.3之后

    更新

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

    在2016年9月发布Android 2.2之后,Android发布了实验性构建缓存功能,以加快 gradle 构建性能,现在这是Android Studio 2.3 Canary的官方版本 . (Official Release note)

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

    How to use:

    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.
    

    Clean the cache:

    • 有一个名为 cleanBuildCache 的新Gradle任务,您可以更轻松地清理构建缓存 . 您可以在终端中键入以下内容来使用它:

    ./gradlew cleanBuildCache

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

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

  • 14

    硬件

    对不起,但是将开发站升级到SSD和大量的ram可能比以下几点的影响更大 .

    工具版本

    提高构建性能是开发团队的主要优先事项,因此请确保使用最新的GradleAndroid Gradle Plugin .

    配置文件

    在任何适用的目录中创建名为 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
    

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

    IDE设置

    可以从IDE设置GUI调整Gradle-IntelliJ集成 . 启用"offline work"(从下面的yava检查答案)将在每个"sync gradle file"上禁用实际网络请求 .

    IDE settings

    Native multi-dex

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

    依赖关系

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

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

    防病毒

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

    分析构建

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

相关问题