在Android Studio上构建Gradle非常非常慢

oymdgrw7  于 2022-11-14  发布在  Android
关注(0)|答案(7)|浏览(356)

以下是我的配置:

MBP 2015,8 GB内存,固态硬盘
安卓工作室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

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

更新:

从那时起我切换到一个16 GB的RAM,有明显的一些改善,我的印象是,它会不到一分钟左右,但它需要3-4分钟,这仍然是不可接受的:下面是我发现耗时太长的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

到这里还可以,但是X1 M0 N1 X大约需要60多秒。
然后,

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

最后这句话也会保留很长时间。

sczxawaw

sczxawaw1#

对于Kotlin用户:
增量生成
编译器最重要的性能特征之一是它使用增量编译。正常的生成将重新编译项目中的所有源文件,但增量生成将跟踪自上次生成以来哪些文件发生了更改,并且只重新编译那些文件以及依赖于它们的文件。这可能对编译时间产生巨大影响,尤其是对于大型项目。
Kotlin在1.0.2版本中添加了增量构建,您可以通过将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

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

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

blpfk2vs2#

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

Check Offline work
Click Apply and Ok

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

t8e9dugd

t8e9dugd3#

您需要发布更多信息,以便我们提供帮助。
发布您的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分钟从头开始构建。
但是请你把我在这篇文章开头要求的信息发出去,我们可以提供更多的帮助。

0ejtzxu1

0ejtzxu14#

如果你有一个很大的代码库,这是很正常的,这需要时间。或者更好的是,这需要一些时间。我刚刚注意到你在你的项目中使用了Kotlin,这意味着你有两个编译java代码的阶段,而不是只有一个。
Kotlin在第一阶段编译(和java引用)。之后你有一个第二阶段的编译,当普通的Java被编译时。这意味着平均编译时间是两倍长。

**编译:**Java代码+Kotlin-〉Kotlin编译器Java代码+解析的Kotlin代码-〉Java复制器反序和其他一切

我的建议是,把你的代码分成模块。如果你能按语言分开模块就更好了。这样Kotlin模块会很慢,但java模块会更快。
如果您有完全独立的Java和Kotlin模块,那么它所花费的时间应该与单独使用Java所花费的时间大致相同。

结论:

模块化你的代码将加快构建。如果你想要Kotlin,减少Java代码,这将加快构建。分离Kotlin和Java模块,它将需要更少的编译,在一些模块上需要更少的阶段,所以它将加快构建。

gj3fmq9x

gj3fmq9x5#

我的情况完全不同,我不知道为什么,但它是由这条线引起的
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

ngynwnxp

ngynwnxp6#

一种可能性是,您的项目级build.gradle文件的allProjects括号中存在无法访问的URL。由于Gradle会按从上到下的顺序扫描该括号中的URL**,并且有10个组件需要下载,因此它会从顶部开始扫描,并等待URL返回响应。URL有可能会导致超时而不返回回复,这将导致Gradle等待每个缺失组件的URL,从而大大增加构建时间。
我的建议是将maven根插入allProjects括号中,从最必要的到最不必要的,从上到下,并确保所有的URL都是可访问的。在修复端点后,我已经将我的一些项目的构建时间从15分钟减少到30秒。
它也与此答案相关,其中所述链接不可达:https://stackoverflow.com/a/67569873/6276596
希望这对某些人有帮助。

j5fpnvbx

j5fpnvbx7#

我也遇到了同样的问题,关键点在这里。您必须自定义Gradle配置。在您的gradle.properties文件中添加:

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#org.gradle.jvmargs=-XX:+UseParallelGC
org.gradle.unsafe.configuration-cache=true
# Use this flag sparingly, in case some of the plugins are not fully compatible
org.gradle.unsafe.configuration-cache-problems=warn

来源:https://developer.android.com/studio/build/optimize-your-build

相关问题