У цій статті ми розглянемо систему збирання Android проектів Gradle. Також дізнаємося чому вона така повільна і розглянемо 9 способів прискорити складання Gradle проекту в Android Studio.
Що таке Gradle?
Gradle - це система збирання проектів. Вона є наступним кроком в еволюції інструментів збірки на основі віртуальної Java машини (JVM). Gradle увібрав в себе кращі ідеї існуючих інструментів (Ant і Maven), а також додав більше гнучкості і свободи в конфігурації збірки.
Крім переваг новий підхід несе і нові проблеми: навіть найпростіший Gradle виклик відбувається досить повільно. На ноутбуці середнього класу запуск простий завдання з висновком списку доступних завдань проекту займає не менше 10 секунд. Офіційна IDE для розробки Android додатків - Android Studio і в ній використовується Gradle.
Android проекти стають все більш складними, набирає популярність модульний підхід розробки, тому продуктивність в нових реаліях має вирішальне значення. Збільшення швидкості збірки проекту всього на кілька секунд дає хороший приріст в продуктивності.
Як збільшити швидкість збірки проекту
Нижче я зібрав методи, які використовую при складанні Gradle проекту:
1. Переконайтеся, що ви завжди використовуєте останню версію Gradle.
Як правило, з кожним новим оновленням існує значне поліпшення продуктивності. Якщо вчасно ставити нові версії та оновлення, які Android Studio пропонує відразу після завантаження, то проблем із застарілою версією Gradle бути не повинно.
2. Постарайтеся звести до мінімуму використання модулів
Іноді доводиться форкнуть якусь бібліотеку, щоб дещо підправити або змінити під свої потреби. Уникайте таких ситуацій, так як збірка модуля займає в
4 рази більше часу, ніж будь-яка jar або aar залежність. Це відбувається тому, що модуль кожен раз повинен бути перебудований з нуля.
3. Увімкніть автономну роботу Gradle
Поставити галочку біля пункту автономної роботи можна шляхом: Preferences => Build, Execution, Deployment => Build Tools => Gradle. Це не дозволить Gradle отримати доступ до мережі під час збирання і змусить його працювати з залежностями проекту в своєму кеші.
Зверніть увагу, що ця функція коректно працює тільки тоді, коли всі залежності вже успішно завантажені і збережені в кеші. Якщо вам потрібно змінити або додати нову залежність у файлі build.gradle. то доведеться відключити опцію автономної роботи - інакше «збірка завалиться».
4. Використовуйте Gradle Daemon
Відкрийте файл gradle.properties в корені вашого проекту і додайте наступний рядок коду:
Це дозволяє заощадити час, потрібний для старту Gradle, так як він стає фоновим процесом. Слід зазначити, що після додавання цієї опції Gradle буде споживати ще більше оперативної пам'яті при складанні проекту.
5. Використовуйте розпаралелювання процесу складання
Цей рядок дозволяє виконувати компіляцію кількох модулів одночасно. Зверніть увагу, що це дасть приріст продуктивності тільки в разі, якщо у вас складний проект з безліччю модулів.
6. Оптимізуйте конфігурацію проекту перед складанням
Додайте опцію org.gradle.configureondemand = true і Gradle зможе перевіряти зміни на рівні проекту і повторно використовувати конфігурацію.
Gradle налаштовує кожен проект перед виконанням завдань незалежно від того, чи дійсно потрібна вона для конкретної збірки. Режим «Конфігурація на вимогу» змінює стандартну поведінку. Як і в паралельному режимі, ця опція буде мати найбільший ефект в проектах з безліччю модулів.
7. Налаштуйте параметри компіляції проекту
Замініть стандартні настройки використання пам'яті на наступні:
org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8
Це дозволить Java-компілятор використовувати до 2 Гб (параметр -Xmx2048m) оперативної пам'яті. Зрозуміло, робити це можна тільки в разі, якщо у вас є обсяг доступної пам'яті більше, ніж 2 Гб.
8. Уникайте динамічних залежностей
Приклад: compile 'com.android.support:design:+'
Ось цей плюсик (+) в кінці говорить нам про те, що використовується динамічна залежність.
Динамічні залежності уповільнюють збірку, так як пошук останньої версії відбувається при кожному білді. Для підвищення ефективності нам необхідно чітко зафіксувати версію.
9. Використовуйте тільки потрібні залежності
Завжди додавайте в проект максимально точно певну залежність. Наприклад, нам в проекті потрібні тільки карти від Google. Замість того, щоб писати так:
compile 'com.google.android.gms: play-services: 10.0.1'
слід завжди писати так:
compile 'com.google.android.gms: play-services-maps: 10.0.1'.
Сподіваюся, ці способи оптимізації процесу складання заощадять вам парочку годин розробки 🙂
А які способи прискорити Gradle використовуєте ви в своїх проектах?
Більше корисних статей!
- Структура проекту в Android Studio
- Що робити, якщо Android Studio видає помилку: Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE?
- Пишемо Hello World на Android. Працюємо в Android Studio
- Що таке Android Fragment: життєвий цикл і приклад використання фрагментів
- Приклад використання ImageButton в Android
- Приклад використання FloatingActionButton в Android
- Огляд і приклад використання бібліотеки ButterKnife в Android
- Робота з WebView в Android: приклад і опис можливостей
- Приклад роботи c Messenger. Служби в Android
- Огляд бібліотеки Picasso - завантаження і кешування зображень в Android