Android-студия Gradle ускоряет сборку


163

Со времени последнего обновления (сборка от 25 июня) любые изменения в Android-студии Gradle мучительно медленно. И, кажется, он также автоматически отслеживает изменения, когда вы редактируете файл и перекомпилируете по keyup.

Каждое изменение занимает несколько минут на моем i5.

Любая идея, как я могу ускорить изменения Gradle?



1
Для тех, кто находит время, чтобы прочитать ответ и вопрос, это не дублирующий вопрос, как предлагает @Dave Jarvis. Но он тесно связан со старой бета-версией AS и, вероятно, не имеет никакого отношения к текущим версиям.
Эйнар Сундгрен


Посмотреть это stackoverflow.com/a/54852468/7137330
Джей

Ответы:


41

Разработчики работают над этим. Как я уже писал в этом ответе, самым быстрым решением сейчас является использование gradle из командной строки, и вам следует переключиться на двоичные библиотеки для всех модулей, которые вы не разрабатываете. На g + идет обсуждение с разработчиками по этому поводу.


Я, очевидно, должен был присоединиться к группе обсуждения инструмента ранее.
Эйнар Сундгрен

99

Определенно имеет значение: как… ускорить время сборки Gradle

Просто создайте файл с именем gradle.propertiesв следующем каталоге:

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

Добавьте эту строку в файл:

org.gradle.daemon=true

2
Хороший ответ. Для дальнейшего и подробного чтения, проверьте этот SO ответ.
Суфиан

12
По вашей ссылке: «Примечание: это влияет только на консольные сборки. Android Studio всегда использует демон Gradle (и в зависимости от ваших настроек некоторые другие оптимизации)».
ChiefTwoPencils

2
У меня есть .gradle каталог с gradle.properties файла. Но все равно займет много времени. Любое предложение
CoDe

4
Не имеет значения
Владо Панджич

И перезапустите Android Studio после внесения изменений.
Иман Мараши

78

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

Шаг 1:

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

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

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

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

Шаг 2:

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

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

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

Шаг 3: В вашем файле gradle.properties -> Добавить следующие строки

org.gradle.jvmargs=-Xmx2048M -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true

Обновить:

Если вы используете Android Studio 2.0 или выше, попробуйте Instant Run

Настройки → Построение, Выполнение, Развертывание → Мгновенный запуск → Включить Мгновенный запуск.

Подробнее о Instant Run - https://developer.android.com/studio/run/index.html#instant-run


6
Я попробовал это, и это значительно ускорило мою сборку. Я знаю, что опция теперь заставит его работать в автономном режиме, есть ли недостатки в создании этого форума?
Симон

5
@Simon - недостатком является то, что вы не сможете загружать последние версии зависимостей, указанных в файле build.gradle. Он работает быстрее, потому что использует кэшированный снимок этих импортированных библиотек. Для некоторых разработчиков стабильность имеет первостепенное значение, но слишком длительный выход в автономный режим может привести к недоразумениям, когда они, наконец, выйдут в сеть, и эти зависимости будут развиваться, оставляя указанный проект позади.
Марк Лапаса

1
Спасибо, братан, это отлично сработало для меня, и моя скорость сборки gradle увеличена
Android_programmer_office

@Simon, когда вы начинаете разработку, вы можете просто установить вышеуказанные настройки, а затем остановить, отключить их, как только закончится ночь, запустив приложение в последний раз, чтобы все было синхронизировано. Или будет проблема с этим?
Саурон

1
оно уменьшилось с 33 до 5 секунд :))
Мирон

62

Мне удалось уменьшить сборку Gradle с 43 до 25 секунд на моем старом ноутбуке core2duo (под управлением Linux Mint), добавив следующее в файл gradle.properties в Android Studio.

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

Источник, объясняющий, почему настройка демона ускоряет сборку: https://www.timroes.de/2013/09/12/speed-up-gradle/


3
По вашей ссылке: «Примечание: это влияет только на консольные сборки. Android Studio всегда использует демон Gradle (и в зависимости от ваших настроек некоторые другие оптимизации)».
ChiefTwoPencils

2
Параллельный вариант улучшил мою сборку даже в AS. Спасибо :)
Джонатанрз

3
Параллельный вариант не улучшил мою сборку.
Владо Панджич

Спасибо. Это решение сделало мое время сборки с 7 минут до 23 секунд ...
Виньеш Бала

спасибо сделал мою сборку от двух минут до 3 секунды
Pouya Samie

12

Выполнение шагов сделает его в 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

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

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


7

Существует более новая версия Gradle (версия 2.4).

Вы можете установить это для вашего проекта (ов), открыв диалоговое окно «Структура проекта» из меню «Файл»,

Project Structure -> Project -> Gradle version

и установите его на «2,4».
Вы можете прочитать больше о повышении производительности по этой ссылке .


2
Спасибо, Gradle версии 2.4 сохранил почти ~ 14 с.
Miao1007



6

Это то, что я сделал, и моя скорость сборки Gradle значительно улучшилась! от 1 минуты до 20 секунд для первой сборки и последующие сборки стали от 40 секунд до 5 секунд.

В файле gradle.properties добавьте это:

org.gradle.jvmargs=-Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

В командной строке Аргументы выберите «Файл»> «Другие параметры»> «Настройки по умолчанию»> «Построить, выполнить, развернуть> Complier» и добавьте следующие аргументы в аргументы командной строки.

Добавь это:

--debug --stacktrace -a, --no-rebuild -q, --quiet --offline

Смотрите изображение здесь


6

Старайтесь избегать использования Mac / ПК с ОЗУ всего 8 ГБ при разработке Android. Как только вы запускаете хотя бы один эмулятор (Genymotion или другой), время сборки в Android Studio становится слишком медленным, а сборка происходит автоматически. Это происходит, даже если вы вносите простое однострочное изменение в 1 исходный файл.

Закрытие эмулятора и использование реального устройства очень помогает, но, конечно, это очень ограниченно и менее гибко. Может помочь уменьшение использования памяти в эмуляторе, но лучше всего убедиться, что на вашем ноутбуке установлено как минимум 12-16 ГБ оперативной памяти.

Обновление (июнь 2017 г.): теперь есть несколько хороших статей на medium.com, в которых подробно объясняется, как ускорить сборку Android Studio, и даже она работает на 8 ГБ компьютерах:

Суммарный консенсус:

Создайте файл gradle.properties (глобальный ~/.gradle/gradle.propertiesили локальный для проекта) и добавьте следующие строки:

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true

4
  1. Включить автономную работу

  2. Повысьте производительность Gradle, добавив следующий код в gradle.properties

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

Пошаговое руководство: http://www.viralandroid.com/2015/08/how-to-make-android-studio-fast.html


Давайте оставим эти ответы разнообразными и сосредоточимся на деталях вопроса ОП. re: stackoverflow.com/a/34828203 ... stackoverflow.com/a/34827929 ... stackoverflow.com/a/34827858 ... stackoverflow.com/a/34827827 ... stackoverflow.com/a/34827788
Дрю

4
dexOptions {
    incremental true
    javaMaxHeapSize "4g"
}

1
«инкрементная тайра» устарела в Android Studio 2018.
М'Айк, кодер,

Это было опубликовано 2 года назад.
AnupamChugh

я знаю, я только что сказал это для людей, которые все еще ищут эти решения;)
M'aiq The Coder

3

Согласно этой странице команды разработчиков Android-приложений для Викимедиа , хорошим способом оптимизации сборок Gradle является добавление этих строк в ~ / .gradle / gradle.properties

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

Для тех, у кого нет файла, есть два способа сделать это:

  1. Добавьте файл локально в ваш проект, создав файл с именем gradle.properties в корне проекта или,

  2. Вы можете установить их глобально для всех ваших проектов, создав один и тот же файл в вашем домашнем каталоге (% UserProfile% .gradle в Windows , ~ / .gradle в Linux и Mac OS X )

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


2

Вы также можете использовать командную строку для повышения производительности. Вы можете использовать команду ./gradlew <task name> из корневой папки вашего проекта из linux или использовать файл gradlew.bat, такой как gradlew. Когда <task name>вы впервые запускаете одну из приведенных выше команд для данного Gradle версия, он загрузит соответствующий дистрибутив Gradle и использует его для выполнения сборки.

При импорте проекта Gradle через его оболочку ваша IDE может попросить использовать дистрибутив Gradle «all». Это прекрасно и помогает IDE обеспечить завершение кода для файлов сборки. Это не только означает, что вам не нужно вручную устанавливать Gradle, но вы также обязательно используете версию Gradle, для которой предназначена сборка. Это делает ваши исторические постройки более надежными. для получения дополнительной информации обратитесь к разделу Выполнение сборки с помощью Wrapper.


2

Для более быстрой сборки увеличьте максимальный размер кучи для демона Gradle до более чем 2048 МБ.

Для этого установите
org.gradle.jvmargs=-Xmx2048M
в проекте gradle.properties .


1

Добавить build.gradleфайл:

android {
...
dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
...
}

Я надеюсь, что это помогает.


1

Я использую i7 5-го поколения с Windows 10 и 1 ТБ Solid State. Я сжал папку проектов Android Studio и получил около 80% прироста. Надеюсь это поможет.

Затем я объединил его с вышеуказанными решениями, т.е. (org.gradle.parallel = true, org.gradle.daemon = true). Повышение производительности было довольно впечатляющим.

Дополнительно:

Все вышеприведенные ответы полностью верны, но я должен заявить как опытный разработчик Android (от 4 с половиной лет), что: ни один разработчик Android / Gradle не должен работать на машине с приводом вращения, вам нужно раскошелиться на Твердое состояние. Мы все нажимаем эту кнопку воспроизведения в IDE 100 раз в день. Когда я перешел от спиннера к SSD (после Gradle), моя скорость и эффективность были буквально в 2–4 раза выше, и я обещаю, что я НЕ преувеличиваю.

Сейчас я не говорю о машине с маленьким SSD и большим счетчиком, я говорю об одном большом SSD. Если у вас уже есть машина с небольшим твердотельным накопителем и большим вращателем, вы можете модернизировать этот маленький накопитель до 500 ГБ и установить его в качестве основного диска ОС с установленными на нем инструментами разработчика.

Поэтому, если вы работаете в быстром темпе, покажите этот пост своему боссу. Приличный твердотельный накопитель емкостью 1 ТБ обойдется вам примерно в 300 фунтов стерлингов (включая НДС) или в 160 фунтов стерлингов за 500 ГБ SSD. В зависимости от того, являетесь ли вы младшим или старшим разработчиком Android, накопитель окупит себя (в виде расходов на заработную плату) в течение 1-2 рабочих недель или примерно от 2,5 до 5 рабочих дней, если вы инвестируете в меньшие; скажем 500GB SSD.

Многие разработчики могут утверждать, что это не так, но это относится к Gradle, так как система Gradle очень сильно затрудняет прямой доступ к диску. Если вы работаете с .NET / C # / VB Net или другими инструментами разработки, вы не заметите большой разницы, но разница в Gradle огромна. Если вы будете действовать на этот пост, я обещаю вам, вы не будете разочарованы. Лично я использую i5 пятого поколения с 8 ГБ оперативной памяти, которая изначально шла со спиннером 1 ТБ, и я обновил его до Samsung SSD 840 EVO 1 ТБ, и с тех пор я никогда не оглядывался назад. Я купил свой у: https://www.aria.co.uk .

Надеюсь это поможет. Также я должен заявить, что это НЕ коммерчески мотивированный пост, я просто рекомендую Aria, поскольку я использовал их много раз прежде, и они всегда были надежными.


1

Несколько команд, которые мы можем добавить в файл gradle.properties:

org.gradle.configureondemand = true - эта команда скажет gradle создавать только те проекты, которые действительно нужны для сборки. Используйте Daemon - org.gradle.daemon = true - Daemon поддерживает работу экземпляра gradle в фоновом режиме даже после завершения сборки. Это устранит время, необходимое для инициализации gradle, и значительно сократит время сборки.

org.gradle.parallel = true - Разрешить Gradle для создания вашего проекта параллельно. Если в вашем проекте несколько модулей, то, включив это, Gradle может параллельно выполнять операции сборки для независимых модулей.

Увеличение размера кучи - org.gradle.jvmargs = -Xmx3072m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8 - Начиная с Android Studio 2.0, gradle использует dex в процессе, чтобы уменьшить время сборки для проект. Как правило, при создании приложений несколько процессов dx выполняются на разных экземплярах виртуальных машин. Но начиная с Android Studio 2.0 все эти процессы dx выполняются в одной виртуальной машине, и эта виртуальная машина также используется совместно с Gradle. Это значительно сокращает время сборки, поскольку весь процесс dex выполняется на одних и тех же экземплярах виртуальной машины. Но для этого требуется больше памяти для размещения всех процессов dex и gradle. Это означает, что вам нужно увеличить размер кучи, требуемый демоном gradle. По умолчанию размер кучи для демона составляет около 1 ГБ.

Убедитесь, что динамическая зависимость не используется. т.е. не используйте реализацию 'com.android.support:appcompat-v7:27.0.+'. Эта команда означает, что gradle будет подключаться к сети и проверять наличие последней версии каждый раз при сборке приложения. Вместо этого используйте фиксированные версии, то есть 'com.android.support:appcompat-v7:27.0.2'


1

Добавьте это в свой gradle.propertiesфайл

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

1

Откройте файл gradle.properties из папки Android и раскомментируйте выделенные строки и укажите значения памяти в соответствии с конфигурацией вашего компьютера. У меня есть 8 ГБ оперативной памяти на моей машине, поэтому я дал максимум 4096 МБ и 1024 МБ соответственно.

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
//Uncomment below line for providing your system specific configuration
#org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -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
 //Uncomment below line to allow parallel process execution.
 #org.gradle.parallel=true

Мое время сборки было сокращено до половины после этого. Счастливое здание !!


0

Это часто происходит, когда вы включили мультидекс в вашем проекте. Это может потенциально замедлить ваш процесс разработки !! По словам док :

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

но вы можете оптимизировать это:

Чтобы уменьшить более длительное время инкрементной сборки, вы должны использовать предварительную индексацию для повторного использования мультидексного вывода между сборками.

Если вы используете Android Studio 2.3 и выше, IDE автоматически использует эту функцию при развертывании приложения на устройстве под управлением Android 5.0 (уровень API 21) или выше.

Поэтому вам нужно установить minSdkVersion на 21 или выше !

Но если ваша рабочая версия должна поддерживать minSdkVersion ниже 21, например 19

Вы можете использовать productFlavors для установки minSdkVersion 21 для вашей версии dev :

    android {
    defaultConfig {
        ...
        multiDexEnabled true
        // The default minimum API level you want to support.
        minSdkVersion 15
    }
    productFlavors {
        // Includes settings you want to keep only while developing your app.
        dev{
            //the IDE automatically uses  pre-dexing feature to mitigate longer incremental when deploying your app to a device running Android 5.0 !
            minSdkVersion 21
        }
        prod {

        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile 'com.android.support:multidex:1.0.3'
}

0

Я предпочитаю сборку из командной строки для лучшего времени сборки. Если база кода вашего приложения велика и у вас есть несколько модулей, вы можете попробовать локальный подход AAR как описано здесь, это значительно увеличит производительность Android Studio и сократит время сборки. Он также совместим со сборками командной строки

https://blog.gojekengineering.com/how-we-improved-performance-and-build-times-in-android-studio-306028166b79

Демо-проект с инструкциями по интеграции можно найти здесь: https://github.com/akhgupta/AndroidLocalMavenRepoAARDemo

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.