Android студія Gradle збільшити швидкість


163

З часу останнього оновлення (побудувати з 25 червня) будь-які зміни в Android-студії Gradle проходять болісно повільно. А також, здається, автоматично відстежуються зміни під час редагування файлу та перекомпіляції під час клавіатури.

Кожна зміна займає кілька хвилин на моєму i5.

Будь-яка ідея, як я можу прискорити зміни Gradle?



1
Для тих, хто потребує часу, щоб прочитати відповідь і запитання, це не дублікат, як запропонував @Dave Jarvis. Але він дуже пов'язаний зі старою бета-версією AS і, ймовірно, мало стосується поточних версій.
Ейнар Сундгрен


Відповіді:


41

Дев працює над цим. Як я розмістив у цій відповіді, найшвидше рішення зараз - використовувати gradle з командного рядка, і ви повинні перейти на двійкові libs для всіх модулів, які ви не розробляєте. На g + ведеться дискусія з розробниками про це.


Я, очевидно, повинен був приєднатися до групи обговорення інструментів раніше.
Ейнар Сундгрен

99

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

Просто створіть файл, названий gradle.propertiesу наступному каталозі:

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

Додайте цей файл у файл:

org.gradle.daemon=true

2
Хороша відповідь. Для подальшого та детального читання перевірте цю відповідь ТА.
Суфіан

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 або новішої версії, спробуйте миттєвий запуск

Налаштування → Збірка, Виконання, Розгортання → Миттєвий запуск → Увімкнути миттєвий запуск.

Детальніше про миттєвий запуск - https://developer.android.com/studio/run/index.html#instant-run


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

5
@Simon - недоліком є ​​те, що ви не зможете знищити останні версії залежностей, визначених у вашому файлі build.gradle. Вона працює швидше, оскільки використовує кешований знімок імпортованих бібліотек. Для деяких розробників стабільність є найважливішою, але занадто довгий вихід в офлайн може спричинити їх, коли вони, нарешті, вийдуть в Інтернет, і ці залежності розвинуться, залишаючи згаданий проект позаду.
Марк Лапаса

1
Дякую, брато, цей працював для мене чудово, і швидкість
монтажу градусів

@Simon, коли ви почнете розробляти, ви можете просто встановити вищевказані налаштування, а потім, як тільки зупинитись, вимкнути їх так само, як закінчується ніч, запустивши додаток останній раз, щоб все ще синхронізувалося. Або з цим виникне проблема?
Саурон

1
вона зменшилася з 33 секунд до 5 секунд :))
Мирон

62

Мені вдалося скоротити складання gradle з 43 секунд до 25 секунд на моєму старому ноутбуці core2duo (під управлінням Linux-монетного двору), додавши наступне до файлу gradle.properties у студії Android

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. Дякую :)
jonathanrz

3
Паралельний варіант не покращив мою збірку.
Владо Панджич

Дякую. Це рішення зробило час моєї збірки з 7 хвилин до 23 секунд ...
Vignesh Bala

подяка зробила мою збірку за дві хвилини до 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

5
Це збільшило час моєї збірки
Егмен Хамуцу


6

Це те, що я зробив, і швидкість монтажу Gradle значно покращилася! від 1 хв до 20сс для першого і наступного складання стало від 40 до 5 сек.

У файл gradle.properties Додати це:

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

У аргументах командного рядка перейдіть до Файл> Інші налаштування> Налаштування за замовчуванням> Збірка, Виконання, Розгортання> Компілятор та додайте такі аргументи до Аргументів командного рядка.

Додати це:

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

Дивіться зображення тут


6

Намагайтеся уникати використання Mac / PC, який має лише 8 ГБ оперативної пам’яті, коли займаєтесь розробкою Android. Як тільки ви запускаєте навіть 1 емулятор (Genymotion чи іншим способом), ваші часки збирання стають надзвичайно повільними в Android Studio з набудовими gradle. Це трапляється навіть у тому випадку, якщо ви зробите просту зміну в одному рядку на 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 = справжній
org.gradle.parallel = вірно

Покрокове керівництво: 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.
M'aiq The Coder

Це було опубліковано 2 роки тому.
AnupamChugh

я знаю, я щойно заявив це людям, які все ще шукають ці рішення;)
M'aiq Кодер

3

Acording на цій сторінці у Android Команда Wikimedia Apps , хороший спосіб оптимізують 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> .when ви перший запустити одну з команд вище для даного 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 ТБ. Я стиснув папку проектів Android Studio Projects і отримав приблизно 80% збільшення. Сподіваюся, це допомагає.

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

Додатково:

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

Зараз я не говорю про те, щоб мати машину з невеликим SSD і великим спінером, я кажу про 1 великий SSD. Якщо у вас вже є машина з невеликим SSD і великим спінером, ви можете оновити невеликий спінер, щоб сказати, на 500 Гб SSD і встановити SSD як ваш основний диск з встановленими на ньому інструментами для розробників.

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

Дуже багато розробників можуть стверджувати, що це не так, але це стосується Gradle, оскільки система Gradle дуже складна в прямому доступі до диска. Якщо ви працюєте з .NET / C # / VB Net або іншими інструментами розвитку, ви не помітите великої різниці, але різниця в Gradle - ВЕЛИЧЕЗНА. Якщо ви виступаєте на цій посаді, я вам обіцяю, ви не розчаруєтесь. Особисто я використовую i7 п'ятого покоління з 8 Гб оперативної пам’яті, який спочатку був із 1 ТБ Spinner, і я оновив його до 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 зберігає екземпляр градації та працює у фоновому режимі навіть після завершення складання. Це дозволить зняти час, необхідний для ініціалізації градації, і значно зменшить час збирання.

org.gradle.parallel = true - Дозволити gradle паралельно будувати проект. Якщо у вашому проекті є кілька модулів, тоді, включивши це, gradle може паралельно виконувати операції збирання для незалежних модулів.

Збільшити розмір кучі - org.gradle.jvmargs = -Xmx3072m -XX: MaxPermSize = 512м -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8 - Оскільки Android android studio 2.0, gradle використовує dex у процесі зменшення термінів складання для проект. Як правило, під час створення програм додатки виконують кілька dx-процесів у різних екземплярах VM. Але, починаючи з Android Studio 2.0, всі ці dx процеси запускаються в єдиній машині випромінювання, і VM також поділяється з gradle. Це значно скорочує час збірки, оскільки весь процес dex працює на одних і тих же екземплярах VM. Але для цього потрібна більша пам’ять, щоб вмістити всі процеси dex та 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

Це часто трапляється, коли ви ввімкнули мультидекс у своєму проекті. Це потенційно може уповільнити ваш процес розвитку !! Відповідно док :

конфігурація мультидекса вимагає значно збільшеного часу на обробку збірки, оскільки система збирання повинна приймати складні рішення щодо того, які класи повинні бути включені в основний файл DEX та які класи можуть бути включені до вторинних файлів DEX. Це означає, що додаткові нарощування за допомогою мультидекса зазвичай займають більше часу і потенційно можуть уповільнити ваш процес розробки.

але ви можете оптимізувати це:

Щоб пом'якшити більш тривалі інкрементальні часи збірки, слід скористатися попередньою дексесіровкою для повторного використання мультидексального виводу між збірками.

Якщо ви використовуєте Android Studio 2.3 або новішої версії, IDE автоматично використовує цю функцію під час розгортання вашого додатка на пристрої з ОС Android 5.0 (рівень API 21) або вище.

Отже, вам потрібно встановити minSdkVersion на 21 або вище !

Але якщо у виробничій версії потрібно підтримувати minSdkVersion нижче 21, наприклад 19

ви можете використовувати productFlavors для встановлення minSdkVersion 21 для вашої версії розробника :

    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

Я віддаю перевагу побудові з командного рядка для кращого часу побудови. Якщо база коду вашої програми велика і у вас є кілька модулів, ви можете спробувати підхід Local 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.