Сборка и запуск приложения через Gradle и Android Studio медленнее, чем через Eclipse

461

У меня есть мультипроект (~ 10 модулей), сборка которого занимает около 20-30 секунд каждый раз. Когда я нажимаю «Выполнить» в Android Studio, мне приходится каждый раз ждать, чтобы перестроить приложение, что крайне медленно.

Можно ли автоматизировать процесс сборки в Android Studio? Или у вас есть какой-нибудь совет, как сделать этот процесс быстрее?

В Eclipse, благодаря автоматическому построению, запуск одного и того же проекта на эмуляторе занимает около 3-5 секунд.

Это мой файл build.gradle (модуль приложения):

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
    }
}
froger_mcs
источник
23
Помните, что в настоящее время ни система сборки на базе Gradle, ни Android Studio не являются серийными.
CommonsWare
11
Время, проведенное здесь, наиболее вероятно в фазе DEXing. К сожалению, похоже, что make android studio выполняет очистку каждый раз, в результате чего ранее удаленные файлы dex были удалены. Надеюсь, скоро мы увидим пошаговое исправление сборки.
Ричард Дж. Росс III
3
В то же время, есть ли какой-нибудь простой способ сообщить об изменении заданий Gradle по умолчанию так, чтобы они не всегда выполняли чистку?
сигмабета
10
@CommonsWare хорошо, нет никакого оправдания, теперь мы находимся на версии 1.02, но это все еще главная проблема. На Android Studio работает 4-гигабайтный четырехъядерный ноутбук, который использует около 3,75 ГБ своей оперативной памяти, просто вмещая один экземпляр проекта Hello World. Это также в результате очень вялый. Для меня это указывает на серьезный и продолжающийся дизайн недостаток. Я надеюсь, что все решится в ближайшее время.
Андрей С
7
@AndrewS Мне жаль, что нам нужно сменить нашу ОС, чтобы заставить Gradle работать с разумной скоростью по сравнению с предыдущими инструментами.
Ричард Ле Мезурье

Ответы:

441

аппаратные средства

Извините, но модернизация станции разработки до SSD и тонны оперативной памяти, вероятно, имеет большее влияние, чем точки ниже вместе взятые.

Версии инструментов

Повышение производительности сборки является основным приоритетом для команд разработчиков, поэтому убедитесь, что вы используете последние версии Gradle и Android Gradle Plugin .

Конфигурационный файл

Создайте файл с именем gradle.propertiesв любом каталоге:

  • /home/<username>/.gradle/ (Linux)
  • /Users/<username>/.gradle/ (Mac)
  • C:\Users\<username>\.gradle (Windows)

Append:

# 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

Свойства Gradle работают локально, если вы размещаете их в projectRoot\gradle.propertiesглобально, если вы размещаете их в user_home\.gradle\gradle.properties. Свойства применяются, если вы запускаете задачи Gradle из консоли или непосредственно из идеи:

Настройки IDE

Можно настроить интеграцию Gradle-IntelliJ из графического интерфейса настроек IDE. Включение «автономной работы» (проверьте ответ из yava ниже) отключит реальные сетевые запросы для каждого «файла синхронизации синхронизации».

Настройки IDE

Родной мульти-декс

Один из самых медленных шагов сборки apk - преобразование байт-кода Java в один файл dex. Включение нативного мультидекса (minSdk 21 только для отладочных сборок) поможет инструментам сократить объем работы (см. Ответ от Акселя Виллгерта ниже).

зависимости

Предпочитают @aarзависимости над подпроектами библиотеки.

Найдите пакет aar в mavenCentral , jCenter или используйте jitpack.io для сборки любой библиотеки из github. Если вы не редактируете источники библиотеки зависимостей, вам не следует каждый раз создавать ее из исходных текстов проекта.

антивирус

Подумайте об исключении файлов проекта и файлов кэша из антивирусной проверки. Это, очевидно, компромисс с безопасностью (не пытайтесь сделать это дома!). Но если вы часто переключаетесь между ветками, антивирус повторно сканирует файлы перед тем, как разрешить использовать процесс gradle, что замедляет время сборки (в частности, проект синхронизации AndroidStudio с файлами gradle и задачами индексирования). Измерьте время сборки и обработайте процессор с включенным антивирусом и без него, чтобы увидеть, связан ли он.

Профилирование сборки

Gradle имеет встроенную поддержку профилирования проектов . В разных проектах используются разные комбинации плагинов и пользовательских скриптов. Использование --profileпоможет найти узкие места.

Сергей Печенизский
источник
1
о зависимостях @aar: например, dependencies {compile 'com.android.support:support-v4:21.0.+'}медленное решение? не уверен, что понял
younes0
1
Imaging, вы добавили такую ​​библиотеку: github.com/novak/numberpicker . Это имеет значение, предоставляя решение кода для проблемы, но автор не публикует его нигде, как maven или jCenter. Теперь вы либо вносите эту библиотеку в качестве источников в свой проект и собираете ее каждый раз, когда собирается основной проект, либо скомпилируете ее один раз и вносите только @aar в репозиторий вашего проекта. Так что это действительно выбор источника / бинарной зависимости. Если вы не редактируете исходный код, вы должны представить свою зависимость в виде предварительно скомпилированного двоичного файла. Для простых библиотек Java это .jar, для библиотек Android это .aar
Сергей
1
Это настройки проекта> Gradle. Смотрите скриншот ниже: i.stack.imgur.com/wrwgo.png
Сергей
2
Я настроил все оптимизации, как описано, однако в Android Studio для запуска моего приложения требуется от 3 до 4 минут, тогда как в Eclipse это было около 30 секунд. Дерьмо. Всего 12 проектов, одно приложение для запуска! Разработчик Android стал таким громоздким, что больше, чем год спустя.
3c71
1
Я применил все оптимизации, и все еще требуется около 20 секунд для создания apk HelloWorld, по сравнению с 2-3 секундами в Eclipse.
Павел
148

Вы можете игнорировать обновления обновлений Gradle.

введите описание изображения здесь

Для Windows, работающей под управлением Android Studio 1.5: File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)

с ~ 30 + сек до ~ 3 сек

Yava
источник
24
Это круто. Это намного быстрее. Но что это ломает?
Джон Баллинджер
2
Лучшее решение. Могу ли я узнать побочные эффекты этого решения
Кавин Варнан
26
@JohnBallinger Offline work - используйте этот флажок для работы с Gradle в автономном режиме. В этом случае Gradle будет использовать зависимости из кэша. Gradle не будет пытаться получить доступ к сети для выполнения разрешения зависимостей. Если требуемые зависимости отсутствуют в кэше зависимостей, выполнение сборки завершится неудачно. (Источник: jetbrains.com/idea/help/gradle-2.html )
cprcrack
10
По умолчанию используется кэшированные зависимости, прежде чем переходить по сети? Я не могу себе представить, что это проверяет наличие обновленных зависимостей при каждом gradleзапуске. Это странно.
Этеш Чоудхури
1
@EhteshChoudhury это очень странно. Вся среда разработки Gradle / Android Studio настолько крутая. Большинство людей думают, что это медленно из-за Java. Я делаю серверную разработку Java на IDEA, и все работает очень гладко.
Степанян
34

Искал везде и наконец нашел решение, которое работает для нас. Включение параллельных сборок (в OSX:) preferences -> compiler -> gradle -> "Compile independent modules in parallel"и включение «автоматически создавать проект» снизили его с ~ 1 минуты до ~ 20 секунд. Благодаря / U / Covalence.

http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/

odiggity
источник
56
20 секунд по-прежнему ужасно медленно.
Йоханнес Бродуолл
6
Имейте в виду, что это, очевидно, помогает только тогда, когда у вас есть несколько независимых модулей / проектов. Я проверил это на одном модульном приложении, и это не имело никакого значения.
Сэм
У меня довольно большой проект, и он занимает 2–3 минуты на MacBook Pro 2012 Core i7, 8 ГБ ОЗУ. Это нормально?
Сермилион
25

Я недавно купил новый твердотельный накопитель и перешел с Windows на Linux. Мои сборочные процессы теперь на порядок быстрее и больше не раздражают.

Хотя он не дает прямого ответа на ваш вопрос о том, почему он медленнее, чем затмение, он показывает, что процесс ограничен диском, и обновление до SSD может оказаться (несколько дорогим) решением. Я предполагаю, что будут люди, гуглящие проблему и заканчивающие здесь, которые могли бы ценить мой опыт.

Андреас Лёве Сельвик
источник
11
Разработчики из моей команды имеют быстрые твердотельные накопители на быстрых машинах с большим объемом памяти. Для нетривиального приложения повторное развертывание после незначительного изменения кода по-прежнему занимает около ~ 45 секунд, по сравнению с повторным развертыванием в Eclipse почти мгновенно. Даже запуск простого не Android-JUnit слишком медленный. «Обновление» до Android Studio и Gradle до сих пор было большим снижением. : - /
spaaarky21
@Lionleaf насколько быстрее переключаться с windows на linux?
younes0
@ younes0 Я не знаю. Я переключился на Linux в то же время я переключился на SSD. Я не говорю, что это имеет какой-то положительный эффект, это были только те две переменные, которые я изменил для ускорения.
Андреас Лёве Сельвик,
4
В моем случае переход с Windows на Linux привел к ускорению сборки Android на 40% ... так что это определенно стоит
kosiara - Bartosz Kosarzycki
Я второй, что сказал @Bartosz Kosarzycki. Я закончил тем, что запустил Ubuntu vm с virtualbox на моей машине разработчика. ~ 54 секунды сборки на windows, ~ 7 сек для той же сборки внутри виртуальной машины на том же оборудовании. Безумное ускорение при переходе на Linux.
Эрик Корнельсон,
20

Ускорьте сборку Gradle в Android Studio 3.2.1

Вы когда-нибудь чувствовали, что ждете завершения сборки в Android Studio в течение нескольких минут? Я тоже. И это довольно раздражает. К счастью, есть несколько способов улучшить это. Android использует Gradle для сборки. Последняя версия 4.6 имеет огромный прирост производительности по сравнению с предыдущими версиями (подробности см. В примечаниях к выпуску).

Шаг 1. Обновление версии Gradle. Более простой способ сделать это - открыть «Настройки модуля» (ваш проект)> «Структура проекта».

введите описание изображения здесь

ОБНОВИТЬ

Изменить на версию Gradle: 4.6 и Изменить на версию плагина Android: 3.2.1

введите описание изображения здесь

Загрузите дистрибутив Gradle Release с https://services.gradle.org/distributions/gradle-4.6-all.zip и скопируйте его в папку Gradle:

введите описание изображения здесь

Последний шаг - добавить дискографию в Настройки> Gradle.

введите описание изображения здесь

Не забудьте нажать кнопку Применить, чтобы сохранить изменения.

Шаг 2. Включите автономный режим, демон Gradle и параллельную сборку для проекта. Автономный режим говорит Gradle игнорировать проверки обновления до даты. Gradle каждый раз запрашивает зависимости, и наличие этой опции заставляет его использовать то, что уже есть на компьютере, для зависимостей. Перейдите в Gradle из настроек Android-студии и щелкните в автономном режиме работы.

введите описание изображения здесь

  1. Перейдите в раздел «Настройка компилятора android studio» и добавьте «- offline» в окне командной строки и нажмите «Компилировать независимые модули параллельно».

введите описание изображения здесь

Следующим шагом является включение демона Gradle и параллельной сборки для вашего проекта. Параллельная сборка приведет к тому, что ваши проекты с несколькими модулями (многопроектные сборки в Gradle) будут построены параллельно, что должно ускорить сборку больших или модульных проектов.

введите описание изображения здесь

Эти параметры можно включить, изменив файл с именем gradle.properties в каталоге скриптов Gradle (т. Е. ~ / .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 Daemon не включен по умолчанию, но рекомендуется всегда включать его для машин разработчиков (но оставлять его отключенным для серверов непрерывной интеграции). Часто задаваемые вопросы об этом режиме можно найти здесь https://docs.gradle.org/current/userguide/gradle_daemon.html . Настройка параллельных сборок может быть небезопасной для некоторых проектов. Требование состоит в том, что все ваши модули должны быть разъединены, иначе сборка может завершиться сбоем ( подробности см. Http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects ).

Шаг 3: Включите инкрементные настройки памяти dexign и твик Вы можете ускорить сборку, включив инкрементную индексацию. В файле сборки вашего модуля:

введите описание изображения здесь

Добавьте эту опцию в свой блок Android:

dexOptions {
    incremental true
}

В этом блоке dexOptions вы также можете указать размер кучи для процесса dex, например:

dexOptions {
    incremental true
    javaMaxHeapSize "12g"
}

Где «12g» - это 12 ГБ памяти. Дополнительную информацию об этом можно найти здесь 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 для получения подробной информации.

Шаг 4. Отключите антивирус. Рассмотрите возможность исключения файлов проекта и кэша из антивирусной проверки. Это, очевидно, компромисс с безопасностью. Но если вы часто переключаетесь между ветками, антивирус повторно сканирует файлы перед тем, как разрешить использовать процесс gradle, что замедляет время сборки (в частности, проект синхронизации Android Studio с файлами gradle и задачами индексирования). Измерьте время сборки и обработайте процессор с включенным антивирусом и без него, чтобы увидеть, связан ли он. Надеюсь, это поможет. Оставьте комментарий, если у вас есть какие-либо вопросы или другие советы по улучшению производительности сборки.

полезная ссылка

Ахмад Агазаде
источник
19

Если вы используете сервисы Google Play, в зависимости от того, какие библиотеки вам нужны, а не весь BLOB-объект, все может быть быстрее.

Если вам нужны только карты, используйте:

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

вместо:

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

Последний приносит 20k методов (см. Блог) в classpath, что может уменьшить общее количество методов до 64k.

Это заставит использовать proguard или multidex даже для отладочных сборок. Для одного из моих проектов у меня было следующее время сборки

  • мультидексная сборка (с поддержкой библиотеки) ~ 40сек
  • сборка proguard ~ 20сек
  • сборка при ограничении метода <64k ~ 5сек

При разработке на SDK 21+ можно было бы оптимизировать мультидексные сборки, как указано в документации Android

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
        }
    }
    ...
}
Аксель Виллгерт
источник
2
Вместо компиляции всей play-serviceбиблиотеки я скомпилировал только mapsи locations и отключил multidex. Я чувствую большую разницу. Спасибо +1
Сами Eltamawy
16

Принятый ответ - для более старых версий Android Studio, и большинство из них работает до сих пор. Обновление Android Studio сделало это немного быстрее. Не пытайтесь указывать размер кучи, так как он будет автоматически увеличиваться с увеличением Xms и Xmx. Вот некоторые модификации с VMoptions

  1. В папке bin находится файл studio.vmoptions для настройки конфигурации среды. В моем случае это studio64.vmoptions Добавьте следующие строки, если они еще не добавлены, и сохраните файл. В моем случае у меня 8 ГБ ОЗУ.

    -Xms4096m
    -Xmx4096m
    -XX:MaxPermSize=2048m
    -XX:+CMSClassUnloadingEnabled
    -XX:+CMSPermGenSweepingEnabled 
    -XX:+HeapDumpOnOutOfMemoryError
    -Dfile.encoding=utf-8`
  2. Запустите андроид студию. Перейдите в Файл-> Настройки-> Сборка, Выполнение, Развертывание-> Компилятор

    • Проверьте компиляцию независимых модулей параллельно
    • В опциях командной строки напишите: --offline
    • Проверьте Сделать проект автоматически
    • Проверьте настройку по требованию

В случае использования Mac, сначала я не мог найти vmoptions. В любом случае, вот хорошая статья о том, как мы можем изменить vmoptions в MAC OSX . Цитирование из этой статьи здесь.

Откройте свой терминал и введите эту команду, чтобы открыть vmoptions в MAC OSX:

open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions
Реаз Муршед
источник
1
Sam
15

Просто создайте файл с именем 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/

Yster
источник
Я не могу увидеть папку .gradle в Mac. Как это открыть?
Дхармик,
@Dharmik: Возможно, вы установили Android Studio под другим именем пользователя. В противном случае, это не правильно установлено, я думаю.
Yster
1
Нет, это была другая проблема .. Системная папка ".gradle" была скрыта .. Так что я иду в Go => Перейти к папке, а затем я нашел папку .gradle .. Спасибо за быстрый ответ ..
Dharmik
14

Вы можете сделать процесс быстрее, если вы используете gradle из командной строки. Существует много оптимизации для разработчиков IDE. Но это только ранняя версия.

Для получения дополнительной информации прочитайте эту дискуссию на g + с некоторыми разработчиками.

rivare
источник
3
Это похоже на правду даже сейчас в 2016 году
Лео поддерживает Монику Челлио
11

Если кто-то работает над проектом, который синхронизируется через Subversion, и это все еще происходит, я думаю, это может замедлить процесс работы в Android Studio. Например, если он работает очень медленно: прокрутка в классе, xml и т. Д., В то время как мое приложение все еще работает на моем устройстве.

  • Перейдите в раздел «Контроль версий» в «Настройках» и установите для параметра «Subversion» значение «Нет».введите описание изображения здесь
Гент Берани
источник
1
Вы экономите мой день: 2/4 мин. -> 15 сек. (Я отключил Tortoise HG для проекта).
Кафтанати
3
Если кто-то все еще использует Subversion, он должен переключиться на Git или Mercurial
Лео поддерживает Monica Cellio
8

Обновление после Android Studio 2.3

Все ответы великолепны, и я рекомендую использовать эти методы для повышения скорости сборки.

После выпуска Android 2.2 в сентябре 2016 года, Android выпустила экспериментальную функцию кеша сборки для ускорения gradleсборки, которая теперь официально представлена ​​в Android Studio 2.3 Canary. (Официальная информация о выпуске)

Он вводит новую функцию кэша сборки, которая включена по умолчанию, может ускорить время сборки (включая полные сборки, инкрементные сборки и мгновенный запуск), сохраняя и повторно используя файлы / каталоги, которые были созданы в предыдущих сборках того же или другого Android проект.

Как пользоваться:

Добавьте следующую строку в ваш 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.

Очистить кеш:

  • Существует новая задача Gradle, призванная облегчить cleanBuildCacheочистку кэша сборки. Вы можете использовать его, набрав в своем терминале следующее:

    ./gradlew cleanBuildCache

  • ИЛИ Вы можете очистить кэш для Android Studio 2.2, удалив все файлы, хранящиеся в папке

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

Шайшав Джогани
источник
7

После изменения этих настроек продолжительность моей компиляции за 10 минут изменилась до ~ 10 секунд.

Шаг 1:

Настройки (Ctrl + Alt + S) ->

Сборка, выполнение, развертывание ->

Компилятор ->

введите " --offline" в окне параметров командной строки.

Шаг 2:

установите флажок «Компилировать независимые модули параллельно».

и нажмите Применить -> ОК

введите описание изображения здесь

Ссылка - https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio

Недостаток:

Вы не сможете развернуть последние версии зависимостей, указанных в вашем файле build.gradle. Он работает быстрее, потому что использует кэшированный снимок этих импортированных библиотек.

Важное примечание : при развертывании приложения удалите эти параметры и соберите последние версии зависимостей.

Ранджит Кумар
источник
6

Решил мой с

File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Offline work

Сборка Gradle продолжалась от 8 минут до 3 секунд.

mn_test347
источник
4

Вот что помогло этому начинающему программисту Android (бывшему профессиональному программисту много лет назад) ускорить работу Android Studio 2.2. Я знаю, что это перефразировка, но, просто подведение итогов в одном месте.

Начальные сборки все еще могут быть очень медленными, но перезапуски запущенных приложений теперь обычно очень терпимы. Я использую неоптимальный ПК: четырехъядерный процессор AMD A8-7410, 8 МБ ОЗУ, HD-память без SSD, Win 10. (И это моя первая публикация о переполнении стека ....;)

В НАСТРОЙКАХ -> GRADLE:

да для «Автономная работа» (это, пожалуй, самый импортный параметр).

В НАСТРОЙКАХ -> КОМПИЛЕР:

да для «Компилировать независимые модули параллельно» (не уверен, действительно ли это помогает использовать многоядерные процессоры).

В GRADLE SCRIPTS , "build.gradle (Модуль: приложение)":

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

ТАКЖЕ В GRADLE SCRIPTS , "gradle.properties (Свойства проекта)":

org.gradle.jvmargs = -Xmx3048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8

org.gradle.parallel = true org.gradle.daemon = true

Кроме того , тестирование на физическом устройстве вместо эмулятора работает хорошо для меня; небольшая таблетка, которая стоит, удобна.

Greg
источник
4

Еще один совет по улучшению производительности:

Android Studio 3.0 включает новый компилятор DEX под названием D8.

«Компилятор 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%.

Leśniakiewicz
источник
1

Эта настройка идет очень быстро для меня (около 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

мой компьютер:

  • Процессор Intel® Pentium® CPU G2030 с частотой 3,00 ГГц, 3000 МГц, 2 принципала процессоров, 2 процессора
  • x64
  • Microsoft Windows 7 Профессиональная
  • (ОЗУ) 16,0 ГБ

файлы проекта
- все находится в локальном HD

MoaLaiSkirulais
источник
1

Пожалуйста, выполните следующие шаги.

  1. Включить автономный режим: пожалуйста, проверьте ниже экрана печати.

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

  2. Включить мгновенный запуск: пожалуйста, проверьте ниже экрана печати.

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

    Если вы хотите узнать больше о мгновенном запуске, пожалуйста, посетите сайт разработчика Android.

Винод
источник
1

Вы можете попробовать открыть меню Gradle в правой части студии и собрать только модули, которые вы изменили, а затем запустить команду установки. Когда вы нажимаете run, он собирает все, независимо от того, какие изменения вы, возможно, внесли в код, который собираете.

SBC
источник
0

Я далек от того, чтобы быть экспертом по 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-схему.

Сифуентес
источник
Артефакт в вашем случае, вероятно, использовался как библиотечный кеш. Вы связываетесь с артефактным сервером, который проверяет наличие библиотеки. Если да, он вернет его вам, в противном случае он заберет его из mavencentral, а затем вернется к вам.
Фабио Марколини
0

В нашем конкретном случае проблема была связана с наличием плагина retrolambda , который заставлял все проекты и подпроекты перекомпилироваться каждый раз, когда мы пытались запустить наше приложение, даже если в наших основных модулях не было изменено ни одного кода.

Удаление ретроламба исправило это для нас. Надеюсь, это кому-нибудь поможет.

Энрике де Соуза
источник
0

Просто попробуйте это в первую очередь. Это мой личный опыт.

У меня такая же проблема. Я просто отключил антивирус (у меня была Avast Security 2015). Сразу после отключения антивируса все прошло хорошо. Gradle закончился успешно. С этого момента в течение нескольких секунд грейдл заканчивается (только 5-10 секунд).

НИХИЛ СМ
источник
0

Привет, я знаю, что это очень очень поздно, но, возможно, помочь кому-то
в моем случае я использовал

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

в моем приложении Gradle зависимость,
но в одной из моих библиотек это было

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

после изменения всех до последней версии моя проблема решена.

Максимум
источник
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

введите описание изображения здесь

Бисваджит Кармакар
источник
0

Тривиальное изменение (в resoruce XML) еще взял 10 минут . Как говорит @rivare в своем ответе, сборка командной строки выполняется намного быстрее (это заняло 15 секунд ).
Вот несколько шагов, чтобы хотя бы быстро выполнить тривиальную сборку из командной строки для Windows.

  1. Перейдите в корневой каталог ваших проектов (где находится gradlew.bat):

    cd c: \ android \ MaskActivity

  2. выполнить сборку :

    Gradlew собрать Отладка

  3. удалить apk с телефона напрямую (перетащите его, чтобы удалить).

  4. Когда сборка будет завершена, убейте БОЛЬШОЙ процесс Java с помощью диспетчера задач Windows.

ИЛИ если у вас есть инструменты Unix на вашем компьютере с Windows:

ps

"pid" показаны:

kill -9 <pid>
  1. Теперь установите ваш apk:

    adb -d установить C: \ Android \ MaskActivity \ app \ build \ output \ apk \ app-debug.apk

Джон Гудвин
источник
0

Для запуска среды Android на машине с низкой конфигурацией.

  1. Закройте ненужные веб-вкладки в браузере
  2. Для пользователей антивируса исключите папку сборки, которая создается автоматически
  3. В Android-студии размер кучи по умолчанию составляет 1,2 ГБ, а может уменьшиться до 512 МБ. Справка> Изменить пользовательские параметры виртуальной машины studio.vmoptions -Xmx512m Производительность макетов будет увеличена

  4. Для Gradle, одного из основных компонентов в Android-студии, Mkae наверняка, как и сейчас, 3.0beta является самым последним

Следующие советы могут повлиять на качество кода, поэтому, пожалуйста, используйте с осторожностью:

  1. Studio включает Power Safe Mode, когда он включен, он закрывает фоновые операции, которые мешают выполнению кода и так далее.

  2. Вы можете запустить lintcheck вручную при необходимости ./gradlew lint

  3. Большинство из них используют эмуляторы Android в среднем, они потребляют 2 ГБ ОЗУ, поэтому, если возможно, используйте реальное устройство Android, это уменьшит нагрузку на ваш компьютер. В качестве альтернативы вы можете уменьшить оперативную память эмулятора, и это автоматически уменьшит потребление виртуальной памяти на вашем компьютере. Вы можете найти это в конфигурации виртуального устройства и дополнительных настройках.

  4. Автономный режим Gradle - это возможность для пользователей с ограниченной пропускной способностью отключать загрузку зависимостей сборки. Это уменьшит фоновую работу, что поможет повысить производительность Android-студии.

  5. Студия Android предлагает оптимизацию для одновременной компиляции нескольких модулей. На компьютерах с небольшим объемом ОЗУ эта функция, вероятно, отрицательно повлияет на производительность. Вы можете отключить его в диалоге настроек компилятора.

Смит Патель
источник