在Android Studio上构建非常慢的Gradle

时间:2017-07-26 12:53:42

标签: android android-studio gradle

这是我的配置:

MBP 2015,8GB RAM,SSD

Android Studio 2.2.3

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

我尝试了一切,我可以在网上找到但似乎没有工作:

---自定义VM选项:

-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的RAM,显然有一些改进,我的印象是它不到一分钟左右,但需要3-4分钟,这仍然是不可接受的:这里&# 39;我发现的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

这最后一行也能保持这么长时间。

5 个答案:

答案 0 :(得分:10)

对于kotlin用户 增量构建

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

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

更多细节:https://medium.com/keepsafe-engineering/kotlin-vs-java-compilation-speed-e6c174b39b5d

将这行代码添加到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

答案 1 :(得分:7)

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

Check Offline work
Click Apply and Ok

答案 2 :(得分:4)

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

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

<强>汇编: Java代码+ Kotlin - &gt; Kotlin编译器 Java代码+解析的Kotlin代码 - &gt; Java copiler 德兴和其他一切

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

如果您拥有完全独立的Java和Kotlin模块,它应该与Java大致相同。

<强>结论:

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

答案 3 :(得分:3)

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

发布你的build.gradle文件&amp;你的应用程序有多少个模块&amp; gradle.properties文件&amp; settings.gradle文件。

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

在应用程序的build.gradle文件中,在&#39; android&#39;中尝试此操作块:

dexOptions {
        preDexLibraries true
        javaMaxHeapSize "4G"
    }

gradle.properties文件中包含此内容:

org.gradle.jvmargs=-Xmx4608M

因为你只是&#39;有8 GB的RAM,你不应该尝试将8 GB专用于Gradle,就像你之前尝试过的那样 我有16 GB的RAM,我使用4-5 GB用于Gradle,并且构建非常快。即使我们最庞大的项目,仍然在7年后仍在开发,需要2-3分钟从头开始构建。

但是,请发布我在本文开头所要求的信息,我们可以提供更多帮助。

答案 4 :(得分:1)

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

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

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

另请查看 Gradle DoctorThe Secrets of the Build Scan Plugin and the internals of Gradle by Nelson Osacky, Soundcloud EN