【问题标题】:VERY VERY slow Gradle build on Android Studio在 Android Studio 上构建非常非常慢的 Gradle
【发布时间】:2017-07-26 12:53:41
【问题描述】:

这是我的配置:

MBP 2015、8GB RAM、SSD

Android Studio 2.2.3

平均而言,构建持续 7/8 分钟,有时是 10/12 分钟

我已经尝试了所有可以在网上找到的方法,但似乎都没有效果:

--- 自定义虚拟机选项:

-Xms1024m
-Xmx8192m
-XX:MaxPermSize=1024m
-XX:ReservedCodeCacheSize=440m
-XX:+UseCompressedOops
-XX:+HeapDumpOnOutOfMemoryError
-Dfile.encoding=UTF-8

--- 编译/按需配置

--- 编译器/并行编译模块

--- Gradle / 离线工作

--- gradle.properties 文件:

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -noverify
org.gradle.parallel=true
org.gradle.configureondemand=true
android.enableBuildCache=true

有没有人知道发生了什么,因为这太荒谬了

更新:

从那以后我切换到 16gb 内存,显然有一些改进,我的印象是不到一分钟左右,但需要 3-4 分钟,这仍然是不可接受的:here's part我发现的 Gradle 日志耗时过长:

git log --pretty=format:'%h %s'
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preAlphaBuild UP-TO-DATE
:app:preBirdsBuild UP-TO-DATE
:app:preKfgBuild UP-TO-DATE
:app:prePenBuild UP-TO-DATE
:app:prePrelaunchBuild UP-TO-DATE
:app:prePtr1Build UP-TO-DATE
:app:prePtr3Build UP-TO-DATE
:app:preReleaseBuild UP-TO-DATE
:app:prepareCnPedantSweetalertLibrary13Library
:app:prepareComAndroidSupportAnimatedVectorDrawable2511Library
:app:prepareComAndroidSupportAppcompatV72511Library
:app:prepareComAndroidSupportCardviewV72511Library
:app:prepareComAndroidSupportDesign2511Library
:app:prepareComAndroidSupportMultidex101Library
:app:prepareComAndroidSupportRecyclerviewV72511Library
:app:prepareComAndroidSupportSupportCompat2511Library
:app:prepareComAndroidSupportSupportCoreUi2511Library
:app:prepareComAndroidSupportSupportCoreUtils2511Library
:app:prepareComAndroidSupportSupportFragment2511Library
:app:prepareComAndroidSupportSupportMediaCompat2511Library
:app:prepareComAndroidSupportSupportV132511Library
:app:prepareComAndroidSupportSupportV42511Library
:app:prepareComAndroidSupportSupportVectorDrawable2511Library
:app:prepareComAndroidSupportTransition2511Library
:app:prepareComCrashlyticsSdkAndroidAnswers1310Library
:app:prepareComCrashlyticsSdkAndroidBeta122Library
:app:prepareComCrashlyticsSdkAndroidCrashlytics265Library
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore2314Library
:app:prepareComDevbracketsAndroidExomedia311Library
:app:prepareComEftimoffAndroidViewpagerTransformers101Library
:app:prepareComGithubCastorflexSmoothprogressbarLibrary110Library
:app:prepareComGithubHotchemiPermissionsdispatcher230Library
:app:prepareComGithubKibotuAndroidAnimationsActions107Library
:app:prepareComGithubKibotuBloodHound105Library
:app:prepareComGithubKibotuCommonAndroidUtils072Library
:app:prepareComGithubKibotuGooglePlayForceUpdate108Library
:app:prepareComGithubKibotuNetKibotuAndroidDeviceinfo121Library
:app:prepareComGithubKibotuOpenAndroidSSLWrapper107Library
:app:prepareComGithubKibotuRecyclerViewPresenter141Library
:app:prepareComGithubKibotuShareIntentBuilderV003Library
:app:prepareComGithubKibotuTimeBomb110Library
:app:prepareComGithubKibotuUrlShortener107Library
:app:prepareComGithubOrhanobutHawk123Library
:app:prepareComGithubOzodrukhCircularReveal201Library
:app:prepareComGoogleAndroidExoplayerExoplayerR1513Library
:app:prepareComGoogleAndroidGmsPlayServicesAds1001Library
:app:prepareComGoogleAndroidGmsPlayServicesAdsLite1001Library
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics1001Library
:app:prepareComGoogleAndroidGmsPlayServicesAnalyticsImpl1001Library
:app:prepareComGoogleAndroidGmsPlayServicesBase1001Library
:app:prepareComGoogleAndroidGmsPlayServicesBasement1001Library
:app:prepareComGoogleAndroidGmsPlayServicesClearcut1001Library
:app:prepareComGoogleAndroidGmsPlayServicesGass1001Library
:app:prepareComGoogleAndroidGmsPlayServicesGcm1001Library
:app:prepareComGoogleAndroidGmsPlayServicesIid1001Library
:app:prepareComGoogleAndroidGmsPlayServicesLocation1001Library
:app:prepareComGoogleAndroidGmsPlayServicesTagmanagerV4Impl1001Library
:app:prepareComGoogleAndroidGmsPlayServicesTasks1001Library
:app:prepareComGoogleFirebaseFirebaseAnalytics1001Library
:app:prepareComGoogleFirebaseFirebaseAnalyticsImpl1001Library
:app:prepareComGoogleFirebaseFirebaseCommon1001Library
:app:prepareComGoogleFirebaseFirebaseCore1001Library
:app:prepareComGoogleFirebaseFirebaseIid1001Library
:app:prepareComGoogleFirebaseFirebaseMessaging1001Library
:app:prepareComJakewhartonButterknife840Library
:app:prepareComJakewhartonProcessPhoenix110Library
:app:prepareComMikepenzFastadapter210Library
:app:prepareComMikepenzIconicsCore280Library
:app:prepareComMikepenzMaterialdrawer581Library
:app:prepareComMikepenzMaterialize100Library
:app:prepareComMukeshMarkdownview100Library
:app:prepareComNightonkeJellytogglebutton102Library
:app:prepareComNightonkeWowoviewpager102Library
:app:prepareComOgaclejapanSmarttablayoutLibrary161Library
:app:prepareComOgaclejapanSmarttablayoutUtilsV4161Library
:app:prepareComPnikosisMaterialishProgress10Library
:app:prepareComSbrukhandaFragmentviewpagerFragmentviewpager100Library
:app:prepareComShawnlinNumberPicker101Library
:app:prepareComSloydevPreferator100Library
:app:prepareComYydcdutRxmarkdown005Library
:app:prepareComZplesacConnectionbuddy140Library
:app:prepareHanksXyzHtextviewLibrary015Library
:app:prepareIoFabricSdkAndroidFabric1314Library
:app:prepareIoNlopezSmartlocationLibrary329Library
:app:prepareIoReactivexRxandroid121Library
:app:prepareJpWasabeefGlideTransformations201Library
:app:prepareJpWasabeefRecyclerviewAnimators225Library
:app:prepareMeGrantlandAutofittextview021Library
:app:prepareMeRelexCircleindicator122Library
:app:prepareNetDanlewAndroidJoda297Library
:app:prepareUkCoChrisjenxCalligraphy220Library
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig
:app:mergeDebugShaders UP-TO-DATE
:app:compileDebugShaders UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:fabricGenerateResourcesDebug
:app:generateDebugResValues UP-TO-DATE
:app:processDebugGoogleServices
Parsing json file: ../google-services.json
:app:generateDebugResources
:app:mergeDebugResources
:app:processDebugResources
:app:generateDebugSources
:app:incrementalDebugJavaCompilationSafeguard
:app:javaPreCompileDebug
:app:compileDebugKotlin

到这里为止没问题,但:app:compileDebugKotlin 大约需要 60 多秒...

然后,

...
...
:app:copyDebugKotlinClasses
:app:compileDebugNdk NO-SOURCE
:app:compileDebugSources
:app:transformClassesWithRetrolambdaForDebug
:app:transformClassesWithDexForDebug

最后一行也会保留这么久。

【问题讨论】:

  • 这对于您尝试构建的项目会有很大的不同。你能告诉我们更多关于这个项目的信息吗?你看到每个项目都会发生这种情况吗?
  • 能分享一下gradle消息窗口的输出吗?在大多数情况下 - 极长的构建时间是由于 gradle 下载外部库而不是使用缓存副本。我们可以从日志中确定。
  • 如果您启用了 Jack 编译器,这可能是一个原因。我发现它大大增加了我的构建时间。
  • @cwbowron Jack 未启用 :(
  • @MarcosPlacona,这个项目不算小,但也不算太大,我也在用Java和Kotlin,但可悲的是,即使我不碰代码,只需重新启动应用程序,构建需要很长时间

标签: android android-studio gradle


【解决方案1】:

对于 Kotlin 用户:

增量构建

编译器最重要的性能特征之一是它使用增量编译。正常构建将重新编译项目中的所有源文件,但增量构建将跟踪自上次构建以来哪些文件已更改,并且仅重新编译这些文件和依赖它们的文件。这会对编译时间产生巨大影响,尤其是对于大型项目。

在 1.0.2 版中向 Kotlin 添加了增量构建,您可以通过将 kotlin.incremental=true 添加到您的 gradle.properties 来启用它们...

有关详细信息,请参阅“Kotlin vs Java: Compilation speed”。

将此代码添加到 gradle.properties 也很有用:

# Add this in your global gradle.properties file 
# at ~/.gradle/gradle.properties
# Enable Gradle Daemon
org.gradle.daemon=true
# Enable Configure on demand
org.gradle.configureondemand=true
# Enable parallel builds
org.gradle.parallel=true
# Enable Build Cache
android.enableBuildCache=true
# Enable simple gradle caching
org.gradle.caching=true
# Increase memory allotted to JVM
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m - 
XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

如果你的所有依赖项都是从 repo 中心下载的,你可以使用它来制作 gradle 离线表单:

File->Setting->Build, Execution, Deploymennt->Gradle

【讨论】:

  • 终于有帮助了!谢谢!
  • 谢谢!真是太棒了,我将构建时间从 2 分钟缩短到 2 秒
  • 这样的东西真的应该是默认的
  • 应该是默认值。为什么选择 Intellij?!
  • 这使我的项目,它有很多模块,R8 构建时间从 20 分钟到 4 分 30 秒。这应该是一个默认值。
【解决方案2】:
File->Setting->Build, Execution, Deploymennt->Gradle

Check Offline work
Click Apply and Ok

注意:在较新版本的 Android Studio 中,View->Tool Windows->Gradle->Toggle button of online/offline

【讨论】:

  • 配置良好的 gradle 构建没有理由在第一次运行后下载任何大文件。
  • 如果你使用像 compile 'com.google.android.gms:play-services:9.2.1' 这样的播放服务依赖项,请不要使用这个,因为播放服务有数千个将加载到项目中的类,而 Gradle 会很慢......使用如果您使用 GCM 通知compile 'com.google.android.gms:play-services-gcm:9.2.1'
【解决方案3】:

您需要发布更多信息以便我们提供帮助。

发布您的 build.gradle 文件以及您的应用有多少模块以及 gradle.properties 文件和 settings.gradle 文件。

您还可以查看 Mac 上的 Activiy Monitor,查看后台运行的其他可能占用一些资源的内容。
8 GB 的 RAM 并不多,因此您应该尝试关闭可能占用部分 RAM 的其他元素。

在应用程序的 build.gradle 文件中的“android”块中试试这个:

dexOptions {
        preDexLibraries true
        javaMaxHeapSize "4G"
    }

连同这个在你的 gradle.properties 文件中:

org.gradle.jvmargs=-Xmx4608M

由于您“仅”有 8 GB 的 RAM,因此您不应像之前尝试的那样尝试将 8 GB 专用于 Gradle。
我有 16 GB 的 RAM,我使用 4-5 GB 的 Gradle,构建速度非常快。即使是我们在 7 年后仍在开发中的最大规模的项目,也需要 2-3 分钟才能从头开始构建。

但是,请把我在这篇文章开头要求的信息张贴出来,我们可以提供更多帮助。

【讨论】:

  • 您还没有发布我要求的任何信息。没有它,我就帮不了你了。
  • preDexLibraries 是什么意思?
【解决方案4】:

如果您有一个庞大的代码库,这需要时间是很正常的。或者更好的是,预计需要一些时间。我刚刚注意到您在项目中使用了 Kotlin,这意味着您有 2 个阶段的 Java 代码编译,而不仅仅是 1 个。

Kotlin 在第一阶段编译(和 java 引用)。之后,在编译纯 Java 时,您将进行第二阶段的编译。这意味着平均编译时间 2 是两倍。

编译: Java 代码 + Kotlin -> Kotlin 编译器 Java 代码 + 解析的 Kotlin 代码 -> Java 编译器 dexing 和其他一切

我的建议是,将代码拆分为模块。如果您可以按语言分隔模块,那就更好了。这样 Kotlin 模块会很慢,但 java 模块会更快。

如果你有完全独立的 Java 和 Kotlin 模块,它应该花费与 Java 大致相同的时间。

结论:

模块化代码将加快构建速度。 如果你想要 Kotlin,减少 Java 代码,它将加快构建速度。 将 Kotlin 和 Java 模块分开,它将需要更少的编译,并且某些模块的阶段更少,因此会加快构建速度。

【讨论】:

    【解决方案5】:

    我的情况完全不同。我不知道为什么,但它是由这条线引起的

    maven { url "https://dl.bintray.com/crysis21/Android" }

    它立即将构建速度提高了约 99%... 因此,请在您的项目中查找此类链接,如果您不需要,请删除它们。

    还可以查看 Gradle Doctor 和 The Secrets of the Build Scan Plugin and the internals of Gradle by Nelson Osacky, Soundcloud EN

    【讨论】:

      【解决方案6】:

      可能是您的 项目级 build.gradle 文件的 allProjects 括号中存在无法访问的 URL。由于 Gradle 按从上到下的顺序扫描该括号中的 URL,假设有 10 个缺少的组件需要下载,它开始从顶部扫描并等待 URL返回响应。而且,URL 有可能会导致超时而不返回回复,这将导致 Gradle 为每个缺少的组件等待 URL,从而大大增加了构建时间。

      我的建议是将 maven 根插入到 allProjects 括号中,从最必要到最不需要,从上到下,并确保所有 URL 都可以访问。在修复端点后,我将一些项目的构建时间从 15 分钟减少到 30 秒。

      它还与此答案有关,其中有问题的链接无法访问:https://stackoverflow.com/a/67569873/6276596

      希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        相关资源
        最近更新 更多