- Gradle
- Задаём имя APK при компиляции
- Оптимизатор кода R8
- Сжимаем итоговый APK
- Класс BuildConfig
- Разделяем отладочную и финальную версию
- Прячем секретную информацию
- Автогенерация версии кода
- settings.gradle
- gradle.properties (Project Properties)
- Режим параллельного выполнения
- Gradle-демон
- Режим конфигурации при необходимости
- Меняем номер версии библиотек в одном месте
- Настройки в Android Studio
- Gradle Task
- Узнать debug.keystore: MD5 и SHA1
- Gradle Console
- Terminal
- Добавление зависимостей через интерфейс студии
- Дополнительное чтение
- Русские Блоги
- Подробное практическое руководство по Gradle в Android
- Практическое руководство по Gradle в Android
- оглавление
- Gradle в проекте Android
- Общая задача Gradle
- Конфигурация динамических параметров
- Project : build.gradle
- Конфигурация глобального атрибута
- Общая структура и описание
- Module : build.gradle
- defaultConfig
- signConfigs
- buildTypes
- sourceSets
- productFlavors
- compileOptions
- lintOptions
- Графическая конфигурация Build.gradle
- зависимости проекта зависимости
- Определение метода def
- Оптимизация скорости компиляции Gradle
- Обнаружить
- Отключить задачу для ускорения
- Оптимизация компиляции Gradle
- Знай задачу
- Пользовательский плагин
- Непосредственно определено в build.gradle
- Определено в проекте
- Пользовательский плагин Independent Module
- В конце концов
Gradle
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 и другие. Трогать их не нужно.
В корневой папке также есть файлы gradlew и gradlew.bat для работы с Gradle Wrapper. В принципе вам не нужно знать о них ничего. Но для параноиков есть информация — если вы часто импортируете проекты из неизвестных источников, то они содержат файл gradle/wrapper/gradle-wrapper.properties. Откройте его текстовым редактором и посмотрите на адрес у distributionUrl. Путь должен вести на официальный сай //services.gradle.org или на внутренний корпоративный сервер. Другие адреса должны вызвать тревогу.
Вы могли заметить, что по сравнению с 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.
Для поиска через Maven-репозиторий используйте The Central Repository Search Engine.
Библиотеку можно подключать и старым способом, используя jar-файл, но такой способ уходит в прошлое.
Сам файл нужно скопировать в папку /libs.
При любом изменении файла недостаточно его сохранить. Нужно также произвести синхронизацию. Наверху обычно появляется жёлтая полоска с ссылкой Sync Now.
Задаём имя APK при компиляции
Можно задать собственное имя при компиляции проекта. Например, так.
Получим имя MyName-1.0.12-release.apk
Оптимизатор кода R8
Оптимизатор кода R8 имеет следующие возможности: урезание байт-кода, сжатие, обфускация, оптимизация, удаление «синтаксического сахара», преобразование в DEX. Оптимизатор может производить все операции за один шаг, что даёт сильное улучшение производительности. R8 был введён в Android Gradle plugin 3.3.0. Вам нужно только включить его.
R8 разработан для работы с существующими ProGuard-правилами, хотя возможны ситуации, когда нужно переработать правила.
Сжимаем итоговый APK
В Gradle 1.4 появилась возможность сжать итоговый файл, убрав неиспользуемые ресурсы, в том числе из библиотек, например, Google Play Services.
Во время сборки приложения вы можете увидеть строку:
Другой способ убрать неиспользуемые ресурсы конфигурации. Например, вам не нужные локализованные ресурсы для всех языков, которые входят в библиотеку Google Play Services или Android Support Library и др. Оставим только нужные языки. Возможно, вы также не хотите поддерживать mdpi или tvdpi-разрешения в своём приложении. Мы можем установить языки и разрешения, которые используются в приложении, остальные будут исключены, что позволит уменьшить вес приложения.
Можно перенести ключи из манифеста.
Чтобы их не светить, например, если выкладывать код на Гитхабе, то сделаем так.
И в манифесте переделаем код.
В большинстве случаев это сработает, но иногда ключ требуется при компиляции и указанный пример может не сработать. В таком случае применяют другой вариант через manifestPlaceholders.
В манифесте пишем.
Класс BuildConfig
В статье LogCat упоминался способ быстрого отключения журналирования.
Суть в следующем. Когда вы создаёте новые переменные в блоках defaultConfig или buildTypes (ветки debug и release), то Gradle создаёт специальный класс BuildConfig, и вы можете получить доступ к этим переменным.
Например, добавим переменную в defaultConfig
На языке Java это равносильно String YOUR_TOKEN = «ABRAKADABRA»;
Теперь мы можем обратиться к созданной строке.
С секцией buildType ситуация интереснее. У секции есть два блока debug и release. Можно создать переменные с разными значениями, которые будут использоваться в зависимости от ситуации. Например, у вас есть собственное API для сервера. Для тестирования вы используете один адрес, а для финальной версии — другой адрес. Тогда вы просто указываете разные адреса в разных ветках. Переменные могут быть не только строковыми.
Создаём код для перехода на веб-страницу.
Теперь вам не нужно переписывать каждый раз код. Загружаться будет страница по нужному адресу автоматически.
Разделяем отладочную и финальную версию
По такому же принципу можно организовать запуск новой версии программы, не затрагивая программу, которую вы установили с Google Play. Допустим вы на своём телефоне установили своё собственное приложение через Google Play. Теперь вам нужно написать новую версию и проверить на своём телефоне. Из-за конфликта имён новое тестируемое приложение перепишет финальную версию или вообще не установится. Поможет следующий трюк.
В специальных переменных applicationIdSuffix и versionNameSuffix мы задаём суффиксы, чтобы избежать конфликта. А в переменной resValue указываем название программы для отладочной и финальных версий, чтобы на устройстве можно было их найти. Не забудьте при этом удалить строковый ресурс app_name в res/values/strings.xml, иначе получите ошибку при компиляции. Теперь можете спокойно запускать приложение с новым кодом, не боясь повредить своё любимое приложение.
Прячем секретную информацию
Следующий совет больше подходит для компаний. Когда подписывается приложение, то нужно указывать пароль, хранилище и т.д. Чтобы их не светить в студии, можно прописать их в переменных и поместить в секцию signingConfigs. Сервер сам найдёт нужные ключи и воспользуется ими в своих сценариях.
Автогенерация версии кода
Нашёл совет, сам не применял. Не обязательно вручную менять версию приложения в атрибутах versionCode и versionName, можно сделать через переменные, а они сами подставятся в нужное место. На любителя.
settings.gradle
Файл settings.gradle обычно состоит из одной строчки.
Это означает, что у вас используется один проект для работы. Если вы будете подключать другие проекты, то здесь появятся новые строки.
gradle.properties (Project Properties)
Несколько советов по настройке файла gradle.properties.
Режим параллельного выполнения
В этом файле можно найти закомментированную строку # org.gradle.parallel=true. Если модули вашего проекта не используют друг друга как зависимости, создавая перекрёстные ссылки, можно включать режим параллельного выполнения, что ускорит скорость сборки до
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 в нижней правой части студии.
Terminal
Запускать задачи Gradle можно и в окне Terminal.
На панели инструментов имеется значок Sync Project with Gradle Files, которую следует использовать при редактировании файлов Gradle. Как правило, студия также выводит предупреждающее сообщение с ссылкой при изменении файла, которая делает ту же работу.
Добавление зависимостей через интерфейс студии
В статье описывался способ включения библиотеки в проект через редактирование файла build.gradle. Существует альтернативный вариант через настройки студии. Щёлкните правой кнопкой мыши на имени модуля (app) и выберите пункт Open Module Settings (быстрая клавиша F4). В правой части окна находятся вкладки, которые оказывают влияние на файл build.gradle. Например, вкладка Dependencies содержит подключаемые библиотеки.
Чтобы добавить новую зависимость, нажмите на значок с плюсом и выберите нужный вариант, например, Library dependency. Откроется список доступных библиотек из репозитория Maven.
Дополнительное чтение
В примере работы с PDF-файлами в папке assets использована операция запрета на сжатие файлов, которое происходит по умолчанию.
Задачи Gradle — теория для общего развития.
Источник
Русские Блоги
Подробное практическое руководство по Gradle в Android
Практическое руководство по Gradle в Android
Gradle делает управление зависимостями, управление библиотеками, управление каналами, а также некоторую динамическую компиляцию и настройку в Android чрезвычайно удобными! !
Эта статья предназначена для систематизации и краткого объяснения основных моментов расширенного использования Gradle в проектах Android.
Более подробный учебник GradleGithub
Документ конфигурации скрипта Gradle:Google Github
оглавление
- Gradle в проекте Android
- Часто используемая задача Gradle
- Конфигурация динамических параметров
- Project:build.gradle
- Конфигурация глобального атрибута
- Общая структура и описание
- Module: build.gradle
- defaucltConfig
- signConfigs
- buidlTypes
- sourceSets
- productFlavors
- compileOptions
- lintOptions
- Графическая конфигурация Build.gradle
- зависимости проекта
- Пользовательский метод def
- Оптимизация скорости компиляции Gradle
- Тест производительности
- Отключить задачу для ускорения
- AAPT
- Оптимизация компиляции Gradle
- Знай задачу
- Пользовательский плагин
- Непосредственно определено в build.gradle
- Определено в текущем проекте
- Пользовательский плагин Independent Module
- В конце концов
Gradle в проекте Android
Ниже приводится краткое описание наиболее важных файлов Gradle для нашего проекта. Мы объясним и дополним их подробно позже.
(Пожалуйста, внимательно прочтите комментарии в коде)
- Проект в build.gradle : Управление проектом Конфигурация компиляции Gradle
- В модульном модуле build.gradle : Контролировать процесс компиляции каждого модуля
- gradle.properties : Конфигурационный файл динамических параметров Gradle
- local.properties : Локальная конфигурация, например: расположение SDK
- gradle-wrapper.properties : Локальный прокси Gradle, указывающий на каталог и версию
- distributionUrl : Если указанная версия gradle не существует, загрузите ее с адреса Value. Во многих случаях нам просто нужно изменить версию на нашу локально существующую версию Gradle.
- settings.gradle : Настроить управление модулями в Gradle
Общая задача Gradle
Средство gradlew
gradlew — это оболочка, которая автоматически загружает версию gradle, определенную в пакете, для обеспечения единой среды компиляции.
gradle использует локальный градиент
gradlew task -all : Луо перечисляет все задачи с определенными ролями и отношениямиgradlew assembleDebug : Экспорт всех пакетов тестирования каналов
assembleRelease : Экспорт официальных пакетов всех каналов
assembleBaiduDebug —stacktrace : Экспорт тестового пакета указанного канала с информацией об исключении.
—stop : Немедленно остановить компиляцию
check : Проверить задачу
build : Выполнить проверку и собрать
clean : Очистить все промежуточные результаты компиляции
Конфигурация динамических параметров
Динамически настраивать параметры ресурсов в Gradle
Мы можем динамически заменять или настраивать ресурсы, используемые в нашем проекте в разных полях (например, отладка, defaultConfig . ) в соответствии с нашими собственными потребностями, такими как переключатели журнала, соответствующие поля содержимого для разных каналов, разные версии Определите различные введенные значения и т. Д.
Прежде всего, чтобы было понятно, для динамических ресурсов build.gradle Использование в нескольких полях в следующем порядке будет выполнено для покрытия:
buildType> productFlavor> defaultConfig> Конфигурация в манифесте> Конфигурация зависимых сторонних библиотек> Значение по умолчанию в любом поле (то есть значение не задано)
- Manifest Заполнитель: параметры манифеста можно настраивать динамически
- gradle.properties использование
- Свойства системы:
Конфигурация: systemProp.proName=123
использование: System.properties[‘proName’] - Настраиваемые атрибуты:
Конфигурация: С ключом: ray.proName=123 , Нет ключа: proName = 123
Использование: с ключом: project。property(‘proName’) , Нет ключа: proName
- Свойства системы:
- BuildConfig файл
- в app/build/generated/source/buildConfig Под папкой
- Использование: buildConfigField «String» , «key» , «\»value\»»
Конфигурация buildConfig Параметры атрибута в String : Тип параметра (int, логическое . ), key : Имя атрибута, value : Значение атрибута, \ Побег персонаж
- resValue Динамически изменять ресурсы проекта
- Подобно buildConfig, resValue(«string»,»key»,»value»)
- среди них string Сказал, что это будет в app/build/generated/res/resValue/. /generated.xml Ключ и значение соответствующей строки генерируются в коде, который можно напрямую getResources().getString(R.string.key); Получите ценность
- нота: Поскольку Gradle объединит конфигурацию скрипта и конфигурацию в файле string.xml при компиляции, существующий ключ в string.xml должен быть удален перед компиляцией, иначе будет сообщено об ошибке
Project : build.gradle
Конфигурация глобального атрибута
- В проекте: build.gradle из buildscript утверждение ext И настраиваемые атрибуты, а затем вы можете использовать этот атрибут непосредственно в других модулях
следующим образом:
- Создайте свой собственный файл свойств Gradle text.gradle А потом в Project Введено, наконец, может использоваться непосредственно в других модулях, конкретные приложения могут ссылаться наEvernote Github
следующим образом:
Общая структура и описание
Module : build.gradle
Управляйте процессом компиляции каждого модуля и конкретной конфигурации параметров
defaultConfig
Базовая информация о конфигурации
signConfigs
Информация о конфигурации подписи
buildTypes
Тип компиляции: укажите различную информацию о конфигурации для разных типов компиляции.
Вот список некоторых свойств и методов, пожалуйста, посмотрите все методы и свойстваДокумент официального сайта
sourceSets
Настроить логическую группу ресурсов
- Создайте собственный каталог проекта, указав путь к папке с ресурсами
- Часто используемый! Управление субподрядом для вашей собственной планировки! !
- Может ссылаться наСообщение блога
productFlavors
Информация о конфигурации канала пакета (внимательно посмотрите комментарии к коду)
compileOptions
lintOptions
Графическая конфигурация Build.gradle
AndroidStuido предоставляет нам очень удобный графический интерфейс конфигурации для Build.gradle, который используется следующим образом:
- Файл -> Структура проекта -> Выберите модуль для настройки -> Выберите поле для настройки
Цифра очень наглядная:
зависимости проекта зависимости
- Анализ конфигурации в зависимостях в build.gradle
-
поэтому зависимость библиотеки
- в src/main Создать в каталоге jniLibs , А затем скопируйте в него файл so
- Конечно, вы также можете пройти sourceSet Уточнить jniLib Целевой каталог настроен для хранения файлов so, от которых зависит управление
Зависимость локального модуля
- в build.gradle из dependencies Добавить в поле compile project(‘:testLibrary’)
- в setting.gradle Добавить модуль в include Средние, такие как: include ‘:app’,’:testLibrary’
Определение метода def
В Gradle вы можете писать методы для динамического вызова информации о конфигурации
Оптимизация скорости компиляции Gradle
Обнаружить
- gradlew build -profile : Скомпилируйте проект и одновременно сгенерируйте файл анализа производительности компиляции в корневом каталоге. build/reports/profile/profile-xxxx.xxx. html , После открытия через браузер
Как показано на рисунке: нам нужно оптимизировать Task Execution
profile.html
- Прокрутите вниз, вы увидите подробные параметры TaskExcution.
Вы можете видеть, что lint занимает больше всего времени, а затем мы можем оптимизировать его в соответствии с конкретной ситуацией в нашем проекте.
Отключить задачу для ускорения
- В соответствии с вышеизложенным требуется время для соответствующего отключения Задачи для достижения эффекта ускорения.
- в Project:build.gradle средний buildScript В динамической конфигурации отключите ее во время компиляции, код: gradle.startParameter.excludedTaskNames.add(‘lint’) Его можно отключить.Если вам нужно и дальше отключать, вы можете добавить и настроить в соответствии с выводом скомпилированного файла анализа проекта.
aapt — это Android Asset Packaging Tool, расположенный в каталоге build-tools SDK. Этот инструмент может просматривать, создавать и обновлять прикрепленные файлы (zip, jar, apk) в формате ZIP. Вы также можете компилировать файлы ресурсов в двоичные файлы. Хотя вы, возможно, не использовали инструмент aapt напрямую, сценарии сборки и плагины IDE будут использовать этот инструмент для упаковки файлов apk для создания приложения для Android (энциклопедия Baidu)
- В режиме отладки нам нужно оптимизировать AAPT, чтобы значительно ускорить нашу компиляцию (не забудьте снова изменить его при выпуске)
Оптимизация компиляции Gradle
- Повышение скорости компиляции самого Gradle
- gradle.properties Средняя конфигурация
- build.gradle Средняя конфигурация
Знай задачу
- Основное использование задачи:
- Специальная задача:
Пользовательский плагин
Пользовательский плагин позволяет нам автоматически выполнять некоторые операции при компиляции проекта в соответствии с требованиями.
Ниже приводится плагин, который автоматически печатает текущее время после компиляции.
Непосредственно определено в build.gradle
Определено в проекте
Фактически, это по сути структурная разборка указанного выше настраиваемого плагина.
Создание каталога плагина
- Создать в корневом каталоге buildSrc
- Структура подкаталогов следующая: buildSrc/src/main/groovy/com/ray с участием buildSrc/src/main/resources/META-INF/gradle-plugins
Создайте buildSrc/build.gradle , Конфигурация следующая
- Plugin Логическая реализация
Основная логика реализации кастомного плагина
в buildSrc/src/main/groovy/com/ray Создать под DateAndTimePlugin
- Extension достичь
Extension Эквивалент информации о конфигурации Gradle (эквивалент класса сущности), а затем основного проекта build.gradle от Extension Пройти конфигурацию (эквивалент присвоения)
То же самое в buildSrc/src/main/groovy/com/ray Создать под DateAndTimePluginExtension
Именование плагина
Имя плагина при настройке внешних ссылок
в buildSrc/src/main/resources/META-INF/gradle-plugins Создать под
timePlugin.properties , Содержимое — это только одна строка кода: implementation-class = com.ray.DateAndTimePlugin
Использование плагина
Главный проект apply plugin:’timePlugin’
По желанию Extension :
Пользовательский плагин Independent Module
- Структура каталогов нового плагина показана на рисунке:
Каталог ModulePlugin
- buildSrc/build.gradle Модификации следующие:
- Публикация: публикация в центральной библиотеке, как и другие модули.
- При использовании плагина конфигурация в основном проекте выглядит следующим образом:
В конце концов
Выше приведено краткое изложение практического продвинутого руководства Gradle, чтобы мы могли управлять нашими проектами более произвольно. Если в будущем у меня появятся новые знания или идеи, я обновлю их здесь в режиме реального времени. Это можно рассматривать как краткое изложение моего понимания и изучения Gradle.
Правильное использование конфигурации Gradle должно сделать нашу разработку более удобной и эффективной.Не поворачивайте телегу перед лошадью.
Если в тексте есть ошибка, укажите ее и исправьте
Если статья вам полезна, поставьте лайк и поддержите ее. Ха О (∩_∩) О
Порекомендуйте и поблагодарите следующие сообщения и проекты в блогах:
Источник