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

Знаете ли вы, что на самом деле вы можете писать собственные приложения для Android без использования Android Studio IDE? Все, что вам нужно, это текстовый редактор, командная строка и инструмент сборки Gradle, да, это возможно, но это больше работы/времени и жизни слишком Короче говоря. «Почему тогда разработчики Android используют Android Studio?»…вы можете спросить… использование Android Studio для разработки Android экономит время, упрощается и дает вам меньше ошибок в приложениях, поскольку Android Studio предоставляет графический
интерфейс к Gradle, а также к другим инструментам для создания макетов, чтения логов и отладки.

Для тех, у кого есть опыт программирования (программирование Java), вы можете сравнить инструмент сборки Gradle с инструментом сборки Apache ANT, который представляет собой программный инструмент для автоматизации процесса сборки программного обеспечения, созданный в рамках проекта Apache Tomcat в начале 2000 года. замена инструмента сборки Make в Unix. Вы совершенно правы, они оба похожи, но Gradle намного мощнее ANT, да, я это сказал. Gradle может компилировать и
развертывать код, как и ANT, но он также использует Maven для загрузки любых сторонних библиотек, которые нужны вашему коду. В отличие от других инструментов сборки на основе XML, таких как Maven или
ANT, Gradle написан на процедурном языке сценариев — Groovy, который используется как для настройки сборки, так и для добавления дополнительных функций, что означает, что вы можете легко создавать довольно сложные сборки. с Gradle… Надеюсь, вы поняли, почему я изначально сказал: «Gradle намного мощнее, чем ANT».

Android Studio — это специальная версия IntelliJ IDEA, которая взаимодействует с Android Software Development Kit (SDK) и системой сборки Gradle. Он использует систему сборки Gradle для компиляции и развертывания приложений. Когда вы нажимаете кнопку запуска в Android Studio, большая часть фактической работы выполняется внешним инструментом сборки под названием Gradle.

Когда я разрабатывал свое первое приложение для Android, которое будет выпущено в магазине Google Play, у меня было много вопросов и недоразумений по поводу инструмента сборки Gradle и того, как его использовать в студии Android. В этой статье я отвечу на некоторые распространенные вопросы, которые помогут вам лучше понять инструмент сборки Gradle.

Почему весь шум вокруг Gradle и что он мне дает?

Вот некоторые из вещей, которые делает Gradle:

  • Находит и загружает правильные версии любых сторонних библиотек, которые вам нужны.
  • Вызывает правильные инструменты сборки в правильной последовательности, чтобы превратить весь ваш исходный код и ресурсы в развертываемое приложение.
  • Устанавливает и запускает ваше приложение на устройстве Android.
  • Целая куча других вещей, таких как запуск тестов и проверка качества вашего кода.

Трудно перечислить все, что делает Gradle, потому что он спроектирован таким образом, чтобы
его можно было легко расширять.

Каждый раз, когда я создаю новый проект, Android Studio создает два файла с именем «build.gradle». Что они делают?

Один из этих файлов находится в папке вашего проекта (Myproject/build.gradle) и содержит небольшое количество информации, определяющей основные настройки вашего приложения, например, какую версию Gradle использовать и какой онлайн-репозиторий:

buildscript {
repositories {
 jcenter()
}
dependencies {
 classpath ‘com.android.tools.build:gradle:3.2.1’
}
}
allprojects {
repositories {
 jcenter()
}
}
task clean(type: Delete) {
 delete rootProject.buildDir
}

Обычно вам нужно изменить код в этом файле только в том случае, если вы хотите установить сторонний плагин или указать другое место, содержащее загружаемые библиотеки.

Второй файл build.gradle находится в папке приложения внутри вашего
проекта (Myproject/app/build.gradle). Этот файл сообщает Gradle, как собрать весь код в вашем основном модуле Android. Здесь задается большинство свойств вашего приложения, таких как уровень API, на который вы ориентируетесь, и специфика того, какие внешние библиотеки потребуются вашему приложению:

apply plugin: ‘com.android.application’
android {
 compileSdkVersion 28
 buildToolsVersion “28.0.1”
defaultConfig {
 applicationId “com.ovosoftware.example”
 minSdkVersion 15
 targetSdkVersion 28
 versionCode 1
 versionName “1.0”
 testInstrumentationRunner   “android.support.test.runner.AndroidJUnitRunner”
}
buildTypes {
release {
 minifyEnabled false
 proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
}
}
dependencies {
 implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
 testImplementation ‘junit:junit:4.12’
 implementation 'androidx.appcompat:appcompat:1.1.0-alpha05'
 implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
}

А как насчет файла «settings.gradle», он тоже часть Gradle?

Проекты Android — это многопроектные сборки Gradle. Файл «settings.gradle» показывает, в каких подкаталогах находятся собственные подпроекты. Содержимое файла по умолчанию:

include ‘:app’

Оператор include указывает, что подкаталог приложения является единственным дополнительным подпроектом. Если вы добавите проект библиотеки Android, он также будет добавлен в этот файл.

Также в папке моего проекта я вижу два странных файла; gradlew и gradlew.bat, что это такое?

Каждый раз, когда вы создаете новое приложение, Android Studio включает установку инструмента сборки Gradle. Если вы посмотрите в каталог проекта, вы увидите два файла с именами gradlew и gradlew.bat. Эти файлы содержат сценарии, которые позволяют создавать и развертывать приложение из командной строки. Чтобы лучше познакомиться с Gradle, откройте командную строку или терминал на своем компьютере для разработки и перейдите в каталог верхнего уровня вашего проекта (именно там находятся gradlew и gradlew.bat). Затем запустите один из сценариев gradlew с параметрами tasks. Gradle расскажет вам о некоторых задачах, которые он может выполнить за вас. Давайте быстро пробежимся по некоторым из наиболее полезных;

  • Задача проверки.Задача проверки выполняет статический анализ исходного кода вашего приложения. Думайте об этом как о своем друге-программисте, который просматривает ваши файлы в поисках ошибок кодирования. По умолчанию задача проверки использует инструмент lint для поиска распространенных ошибок программирования Android. Он
    создаст отчет в app/build/reports/lint-results.html.
  • Задача чистой установкиDebug. Эта задача полностью скомпилирует и установит ваше приложение на подключенное устройство. Очевидно, вы можете сделать это из IDE, но это может быть полезно сделать из командной строки, если, например, вы хотите автоматически собрать свое приложение на сервере интеграции.
  • Задача androidDependencies: эта задача автоматически извлекает все библиотеки, которые требуются вашему приложению, и некоторые из этих библиотек автоматически извлекают другие библиотеки, которые могут извлекать другие библиотеки и… ну, вы поняли.
    Несмотря на то, что в вашем файле app/build.gradle может упоминаться только несколько библиотек, вашему приложению может потребоваться установить много зависимых библиотек для вашего приложения. Так что иногда полезно посмотреть, какие библиотеки нужны вашему приложению и почему. Для этого и предназначена задача androidDependencies: она отображает дерево всех библиотек в вашем приложении.

Какие общие изменения выполняются в этих файлах gradle?

Вы можете указать минимальную и целевую версии Android SDK и другие свойства по умолчанию. Файл gradle содержит блоки и свойства. Каждый блок имеет определенный набор свойств, которые можно редактировать. Все, что вам нужно сделать, это изменить значение свойства, включая некоторые общие свойства и их указанные блоки;

  • В файле build.gradle верхнего уровня (Myproject/build.gradle)

Дистрибутив Gradle не включает функции Android по умолчанию. Google предоставляет подключаемый модуль Android для Gradle, который позволяет легко настраивать проекты Android. Блок buildscript в файле сборки верхнего уровня сообщает Gradle, где скачать этот подключаемый модуль. Как видите, по умолчанию плагин загружается из jcenter, что означает репозиторий Bintray JCenter Artifactory. Поддерживаются и другие репозитории (особенно mavenCentral(), репозиторий Maven по умолчанию), но JCenter теперь используется по умолчанию.

allprojects block указывает, что проект верхнего уровня и любые подпроекты по умолчанию используют репозиторий jcenter() для разрешения любых зависимостей библиотеки Java.

В сборку верхнего уровня добавлена ​​задача clean task. Часть type: Delete указывает, что новая задача является настраиваемым экземпляром встроенной задачи Delete из Gradle. В этом случае задача удаляет каталог сборки из корневого проекта, который по умолчанию является папкой сборки на верхнем уровне.

  • В файле сборки Gradle для подпроекта приложения (Myproject/app/build.gradle)

Свойство apply в Gradle добавляет подключаемый модуль Android в систему сборки,
который включает конфигурацию android block Domain Specific Language (DSL).

android block — это точка входа для Android DSL. Здесь вы должны указать цель компиляции с помощью compileSdkVersion и версию инструментов сборки с помощью buildToolsVersion. Оба эти значения должны быть присвоены самой последней доступной версии, поскольку они обратно совместимы и включают все текущие исправления ошибок.

defaultConfig block внутри android показывает несколько свойств:

  • applicationId
    «Пакетное» название приложения, которое должно быть уникальным в магазине Google Play. Это значение никогда не может измениться в течение жизни вашего приложения; его изменение приведет к тому, что ваше приложение будет рассматриваться как совершенно новое приложение, и существующие пользователи не увидят изменения как обновление. До перехода на Gradle это был атрибут package корневого элемента манифеста Android. Теперь их можно разделить.
  • minSdkVersion
    Минимальная версия Android SDK, поддерживаемая этим приложением. Устройства более ранних версий не увидят это приложение при доступе к магазину Google Play.
  • targetSdkVersion
    Версия Android, предназначенная для этого приложения. Android Studio выдаст предупреждение, если это не последняя версия, но вы можете использовать любую версию, которая вам нравится.
  • versionCode
    Целое число, представляющее эту версию вашего приложения по сравнению с другими. Приложения обычно используют это в процессе обновления.
  • versionName
    Строка, представляющая версию выпуска вашего приложения, которую видят пользователи. Обычно в виде строки <major>.<minor>.<version>.

Блок dependencies состоит из трех строк. Первая зависимость, fileTree, означает, что все файлы, оканчивающиеся на .jar в папке libs, добавляются в путь к классам компиляции. Вторая строка указывает Gradle загрузить версию 4.12 JUnit и добавить ее на фазу «тестовой компиляции», что означает, что классы JUnit будут доступны в исходном дереве src/androidTest/java, а также (необязательно) src/test/ java, которое можно добавить для чистых модульных тестов (т. е. тех, которые не используют Android API). Полный синтаксис для зависимости явно вызывает группу, имя и номер версии.

Если Gradle можно легко расширить, могу ли я написать свою собственную задачу (с Groovy) или от других разработчиков в виде плагинов?

Конечно!, помимо написания собственных задач, вы также можете устанавливать плагины Gradle.
Плагин может значительно расширить вашу среду сборки. Хотите писать код Android в Clojure? Хотите, чтобы ваша сборка автоматически взаимодействовала с системами управления версиями, такими как Git? Как насчет того, чтобы запустить целые серверы в Docker, а затем протестировать на них свое приложение? Вы можете делать эти и многие другие вещи, используя плагины Gradle. Подробнее о том, какие плагины доступны, смотрите здесь.

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