Gradle - система автоматичного складання, побудована на принципах Apache Ant і Apache Maven. В Eclipse використовувалася система Ant, але більшість розробників навіть не помічало її роботи. В основному можливості системи використовувалися в конторах для автоматизації різних завдань. В Android Studio такий номер не пройде. Gradle супроводжує вас під час розробки постійно. Спочатку, якщо ви перейшли з Eclipse, Gradle сильно дратує своїми діями. Але пізніше ви оціните її зручність і може навіть полюбите її.
Gradle не є винаходом для Android Studio, система була розроблена раніше і використовувалася в додатках для Java, Scala та іншими мовами.
Система збирання Gradle дуже потужна і складна, щоб про неї розповісти в двох словах. Є цілі книги про неї. Самі команди в Gradle представляють собою звичайний текст з використанням синтаксису Groove для конфігурації. Але нам не потрібно знати все. Познайомимося ближче з системою і навчимося користуватися нею.
Створіть новий проект або відкрийте будь-який існуючий проект з Android Studio і подивіться на структуру проекту.
В останніх версіях студії файли Gradle виділили в окрему папку Gradle Script. Розкрийте її. В основному вас повинен цікавити файл build.gradle. який відноситься до модулю. Поруч з цим файлом в дужках буде написано Module: app. Подвійним клацанням відкрийте його, ви побачите, що файл є текстовим.
Також є файл build.gradle. який відноситься до проекту. Але з ним працюють рідше. Так знаходяться налаштування для репозиторіїв і самого Gradle.
Повернемося до файлу модуля, ви побачите багато цікавої інформації. Наприклад, ви там можете побачити настройки, які раніше ви могли бачити в маніфесті - номери версій, номера SDK і так далі. Забігаючи вперед, скажу, що тут можна додати всього одну чарівну рядок і потрібна бібліотека сама скочується з інтернету і встановиться в проекті. Краса!
Однак повернемося в кореневу папку. Крім файлів build.gradle ми можемо помітити файли gradle.properties. settings.gradle і інші. Чіпати їх не потрібно.
Ви могли помітити, що в порівнянні з Eclipse змінилася структура файлів. В папці app знаходиться папка src. а ній папка main. в яких папки java. res і файл маніфесту. Нова структура краще відповідає вимогам Gradle для управління файлами.
Ви, наприклад, можете створювати альтернативні папки з ресурсами і за допомогою build.gradle підключити їх до проекту.
У цьому прикладі ми вказали, що існують нова папка presentations в папці / src / main / поряд з існуючими папками java і res. Усередині створеної папки є ще дві папки layout і animations. які містять файли ресурсів.
Тільки пам'ятайте, що вам потрібно уникати конфлікту імен при злитті всіх файлів при складанні.
Значення sourceSets вказує Gradle, які папки слід використовувати. Цим прийомом користуються просунуті програмісти. Ми поки не будемо використовувати таку техніку.
Інша корисна можливість - створювати різні версії додатків, наприклад, демо-версію і платну версію. Трохи про це розказано тут.
Номер версії додатка і вимоги до версії Android прописані в секції defaultConfig. Якщо у вас збереглися старі версії додатків, то в маніфесті можете видалити дані записи. По-моєму, там навіть виводиться відповідна підказка. Навіть якщо ви ці дані в маніфесті не видалите, то значення з gradle.build мають більший пріоритет і перепишуть значення в маніфесті прі не збіг.
Підключення бібліотеки відбувається одним рядком. Наприклад, потрібно додати бібліотеку Picasso:
В Android Studio 3.0 використовується нова версія Gradle, в якій compile вважається застарілою. Замість нього слід використовувати нове слово implementation.
Є схожа команда, яка підключає бібліотеку, яка буде використовуватися тільки для налагодження програми і в релізной версії вона не потрібна.
Далі включаєте синхронізацію і через кілька секунд в папці з'являється потрібна бібліотека, готова до використання. Сама бібліотека скачується з спеціального сховища-сховища JCenter. Даний репозиторій використовується за умовчанням і прописаний в buil.gradle проекту.
Можна вказати інший репозиторій, наприклад, Maven Central.
На цікавому сайті Gradle, будь ласка можна відразу знайти свіжий номер версії бібліотеки через пошук, в даному випадку шукалася бібліотека Picasso.
Бібліотеку можна підключати і старим способом, використовуючи jar-файл, але такий спосіб йде в минуле.
Сам файл потрібно скопіювати в папку
Також в файлі Gradle використовується інструмент ProGuard. Він може обрізати, оптимізувати і обфусціровать (вдіяти не читаним) ваш код. Для його включення потрібно виставити властивість minifyEnabled в значення true.
У вказаному файлі потрібно прописати правила для роботи ProGuard. Сам я з даним інструментом не працював, тому докладніше розповісти не можу.
Наприклад, можна вказати у файлі класи.
При будь-якій зміні файлу недостатньо його зберегти. Потрібно також провести синхронізацію. Нагорі зазвичай з'являється жовта смужка з посиланням Sync Now.
Задаємо ім'я APK при компіляції
Можна задати власне ім'я при компіляції проекту. Наприклад, так.
Отримаємо ім'я MyName-1.0.12-release.apk
Стискаємо підсумковий APK
У Gradle 1.4 з'явилася можливість стиснути підсумковий файл, прибравши непотрібні ресурси, в тому числі з бібліотек, наприклад, Google Play Services.
Під час складання програми ви можете побачити рядок:
Інший спосіб прибрати невикористовувані ресурси конфігурації. Наприклад, вам не потрібні локалізовані ресурси для всіх мов, які входять в бібліотеку Google Play Services або Android Support Library і ін. Залишимо тільки потрібні мови. Можливо, ви також не хочете підтримувати mdpi або tvdpi-дозволу в своєму додатку. Ми можемо встановити мови і дозволу, які використовуються в додатку, інші будуть виключені, що дозволить зменшити вагу додатки.
клас BuildConfig
У статті LogCat згадувався спосіб швидкого відключення журналирования.
Суть в наступному. Коли ви створюєте нові змінні в блоках defaultConfig або buildTypes (гілки debug і release), то Gradle створює спеціальний клас BuildConfig. і ви можете отримати доступ до цих змінним.
Наприклад, додамо змінну в defaultConfig
На мові Java це рівносильно String YOUR_TOKEN = "ABRAKADABRA";
Тепер ми можемо звернутися до створеної рядку.
Створюємо код для переходу на веб-сторінку.
Поділяємо отладочную і фінальну версію
У спеціальних змінних applicationIdSuffix і versionNameSuffix ми задаємо суфікси, щоб уникнути конфлікту. А в змінної resValue вказуємо назву програми для налагоджування і фінальних версій, щоб у пристрої було їх знайти. Не забудьте при цьому видалити строковий ресурс app_name в res / values / strings.xml. інакше отримаєте помилку при компіляції. Тепер можете спокійно запускати додаток з новим кодом, не боячись пошкодити своє улюблене додаток.
Ховаємо секретну інформацію
Наступна порада більше підходить для компаній. Коли підписується додаток, то потрібно вказувати пароль, сховище і т.д. Щоб їх не світити в студії, можна прописати їх в змінних і помістити в секцію signingConfigs. Сервер сам знайде потрібні ключі і скористається ними в своїх сценаріях.
Автогенерація версії коду
Знайшов рада, сам не застосовував. Не обов'язково вручну змінювати версію програми в атрибутах versionCode і versionName. можна зробити через змінні, а вони самі підставили в потрібне місце. На любителя.
settings.gradle
Файл settings.gradle зазвичай складається з одного рядка.
Це означає, що у вас використовується один проект для роботи. Якщо ви будете підключати інші проекти, то тут з'являться нові рядки.
gradle.properties (Project Properties)
Кілька порад по налаштуванню файлу gradle.properties.
Режим паралельного виконання
Gradle-демон
Включення на комп'ютері демона Gradle дасть значний приріст в швидкості збірки.
Режим конфігурації при необхідності
Якщо в проекті використовується багато модулів, то можна включити режим конфігурації при необхідності. Прискорення буде помітно при великій кількості використовуваних модулів:
Міняємо номер версії бібліотек в одному місці
Дуже часто в проекті використовуються взаємопов'язані бібліотеки з однаковими номерами.
Можна швидко поміняти у всіх номера через змінну. Для цього використовується секція ext. в якій вказується змінна і номер версії. Потім в секції dependencies номер версії замінюється на ім'я змінної
Зверніть увагу, що одинарні лапки замінюються на подвійні, а символ $ вказує на строковий тип.
Розширена версія з різними змінними в іншому вигляді.
Якщо в проекті використовуються кілька модулів з однаковими залежностями, то ці записи можна перенести в кореневій build.gradle. щоб не міняти номери версій в кожному модулі.
Налаштування в Android Studio
Розглянемо налаштування, доступні в Android Studio. Закрийте поточний проект, щоб побачити стартове вікно студії. У правій частині натисніть на пункт Configure. У наступному вікні виберіть пункт Settings. щоб опинитися у вікні налаштувань студії. У лівій частині знайдіть пункт Build, Execution, Deployment. потім підпункт Build Tools. далі підпункт Gradle. За замовчуванням, там все чисто, тільки вказано шлях у Service directory path. Це були загальні настройки.
Тепер розглянемо параметри, які стосуються проекту. Запустіть будь-який проект в Android Studio. Виберіть меню File | Settings. . Знову пройдіться по пунктах Build, Execution, Deployment | Build Tools | Gradle. Ви побачите практично таке ж вікно з невеликими змінами. Тепер поле Linked Gradle Projects НЕ буде порожнім, а також з'являться додаткові налаштування. За замовчуванням рекомендують використовувати Use default gradle wrapper.
Gradle Task
На правій стороні Android Studio є вертикальна вкладка Gradle. яку можна розгорнути. Вона містить список завдань (task), яка виконує Gradle при роботі з поточним проектом. Ви можете виділити будь-яку з цих завдань і запустити її подвійним клацанням. Можна виділити кілька завдань.
Дізнатися debug.keystore: MD5 і SHA1
Іноді потрібно дізнатися значення debug.keystore. MD5 і SHA1. Зазвичай їх отримують через командний рядок. Але це довго і незручно, так як потрібно пам'ятати всі аргументи. Є спосіб простіше. Відкриваємо вкладку Gradle. натискаємо на кнопку зі стрілками Refresh all Gradle Projects. Потім послідовно відкриваємо елементи Tasks | android і запускаємо команду signingReport. У нижньому вікні Run побачите потрібну інформацію.
Gradle Console
Коли виконується якась задача Gradle, то хід її виконання можна побачити у вікні Gradle Console. Відкрити її можна через вкладку Gradle Console в нижній правій частині студії.
Запускати завдання Gradle можна і у вікні Terminal.
На панелі інструментів є значок Sync Project with Gradle Files. яку слід використовувати при редагуванні файлів Gradle. Як правило, студія також виводить попередження з посиланням при зміні файлу, яка робить ту ж роботу.
Додавання залежностей через інтерфейс студії
У статті описувався спосіб включення бібліотеки в проект через редагування файлу build.gradle. Існує альтернативний варіант через налаштування студії. Клацніть правою кнопкою миші на імені модуля (app) і виберіть пункт Open Module Settings (швидка клавіша F4). У правій частині вікна знаходяться вкладки, які впливають на файл build.gradle. Наприклад, вкладка Dependencies містить спільні бібліотеки.
Щоб додати нову залежність, натисніть на значок з плюсом і виберіть потрібний варіант, наприклад, Library dependency. Відкриється список доступних бібліотек зі сховищ Maven.
додаткове читання
У прикладі роботи з PDF-файлами в папці assets використана операція заборони на стиск файлів, яке відбувається за замовчуванням.
Завдання Gradle - теорія для загального розвитку.