ОЧЕНЬ ОЧЕНЬ медленный Gradle на основе Android Studio

здесь моя конфигурация:

MBP 2015, оперативная память 8 ГБ, 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

Кто-нибудь знает, что происходит, потому что это просто смешно.

UPDATE:

С тех пор я перешел на 16-гигабайтную оперативную память, очевидно, есть некоторые улучшения, у меня создалось впечатление, что это будет меньше минуты или около того, но это занимает 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

вверх, пока здесь не будет хорошо, но :app:compileDebugKotlin займет около 60 секунд...

а затем

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

Эта последняя строка остается так долго.

Ответ 1

Для пользователей kotlin Инкрементные сборки

Одной из наиболее важных характеристик производительности компилятора является использование инкрементной компиляции. Обычная сборка перекомпилирует все исходные файлы в проекте, но инкрементная сборка будет отслеживать, какие файлы были изменены с момента последней сборки, и перекомпилирует только те файлы и файлы, которые зависят от них. Это может оказать огромное влияние на время компиляции, особенно для крупных проектов.

Инкрементные сборки были добавлены в Kotlin в версии 1.0.2, и вы можете включить их, добавив 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

И если все ваши зависимости загружаются из репо-центра, вы можете сделать gradle автономную форму

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

Ответ 2

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

Check Offline work
Click Apply and Ok

Ответ 3

Если у вас большая база кода, это вполне нормально, что требуется время. Или лучше, он ожидал, что потребуется некоторое время. Я только что заметил, что вы используете Kotlin в своем проекте, а это означает, что у вас есть 2 этапа компиляции для Java-кода, а не только 1.

Kotlin скомпилирован (и ссылки на Java) на первом этапе. После этого у вас есть второй этап компиляции, когда скомпилирована простая Java. Это означает, что среднее время компиляции в два раза больше.

Компиляция: Java-код + Kotlin → компилятор Kotlin Java-код + анализированный код Котлина → Java-копир dexing и все остальное

Мое предложение было бы, разделить ваш код в модулях. Еще лучше, если вы можете разделить модули по языку. Таким образом, модули Kotlin будут медленными, но java-модули будут быстрее.

Если у вас есть полностью отдельные модули Java и Kotlin, это займет примерно то же время, что и Java.

Вывод:

Модуляция вашего кода ускорит сборку. Если вы хотите Kotlin, уменьшите Java-код, это ускорит сборку. Разделите модули Kotlin и Java, это потребует меньше компиляции и меньше этапов для некоторых модулей, поэтому оно ускорит сборку.

Ответ 4

Вам нужно разместить дополнительную информацию для нас.

Опубликуйте свои файлы build.gradle и количество модулей вашего приложения и gradle.properties файл и settings.gradle файл.

Вы также можете взглянуть на Activiy Monitor на своем Mac и посмотреть, что еще работает в фоновом режиме, который может занять некоторые ресурсы.
8 ГБ оперативной памяти не так много, поэтому вы должны попробовать и выключить другие элементы, которые могут занимать часть этой ОЗУ.

Попробуйте это в файле build.gradle приложения в блоке "android":

dexOptions {
        preDexLibraries true
        javaMaxHeapSize "4G"
    }

Наряду с этим в файле gradle.properties:

org.gradle.jvmargs=-Xmx4608M

Поскольку у вас всего 8 ГБ ОЗУ, вы не должны пытаться выделить 8 ГБ на Gradle, как вы пытались раньше.
У меня 16 ГБ оперативной памяти, и я использую 4-5 ГБ для Gradle, а сборки довольно быстрые. Даже наш самый масштабный проект, который все еще разрабатывается через 7 лет, занимает 2-3 минуты, чтобы строить с нуля.

Но, пожалуйста, разместите информацию, которую я запросил в начале этого сообщения, и мы можем помочь больше.