Что такое Gradle в Android Studio?
==================================

 Gradle немного запутывает меня, а также для нового разработчика Android. Может ли кто-нибудь объяснить, что gradle в Android Studio, и какова его цель? Почему gradle включен в Android Studio?

 

###  Короткий ответ

 Gradle - это система сборки.

###  Длинный ответ

Перед Android Studio вы использовали Eclipse для своих целей разработки, и, скорее всего, вы не знали, как создать Android APK без Eclipse.

Вы можете сделать это в командной строке, но вам нужно узнать, что делает каждый инструмент (dx, aapt) в SDK.
Eclipse спас нас всех от этих низких уровней, но важных, фундаментальных деталей, предоставив нам собственную систему сборки.

Теперь вы когда-нибудь задавались вопросом, почему папка `res` находится в том же каталоге, что и ваша папка `src`?

Здесь система сборки входит в изображение. Система сборки автоматически принимает все исходные файлы (`.java` или `.xml`), затем применяет соответствующий инструмент (например, принимает файлы класса `java` и преобразует их в файлы `dex`) и группирует их все в один сжатый файл, наш любимый APK.

В этой сборке используются некоторые условные обозначения: пример одного - указать каталог, содержащий исходные файлы (в Eclipse это папка `\src`) или файлы ресурсов (в Eclipse это папка `\res`).

Теперь, чтобы автоматизировать все эти задачи, должен быть script; вы можете написать свою собственную систему сборки, используя сценарии оболочки в синтаксисе linux или пакетных файлов в окнах. Получил?

 Gradle - это еще одна  **система сборки**, которая использует лучшие функции других систем сборки и объединяет их в одну. Это улучшается исходя из их недостатков.
Это  **система сборки на основе JVM**, что означает, что вы можете написать свой собственный script на Java, который использует Android Studio.

Одна крутая вещь о gradle заключается в том, что она является системой  **с плагинами**. Это означает, что если у вас есть собственный язык программирования, и вы хотите автоматизировать задачу создания какого-либо пакета (выходного JAR для Java) из источников, вы можете написать полный плагин на Java или Groovy (или Kotlin, см.  [здесь](https://blog.gradle.org/kotlin-meets-gradle)) и распространить его на остальной мир.

###  Почему Google использовал его?

Google увидела одну из самых современных систем сборки на рынке и поняла, что вы можете писать собственные сценарии с минимальной кривой обучения и без обучения Groovy или любого другого нового языка. Поэтому они написали плагин Android для Gradle.

Возможно, вы видели файлы `build.gradle` в вашем проекте. Именно здесь вы можете писать сценарии для автоматизации своих задач. Код, который вы видели в этих файлах, - это код Groovy. Если вы пишете `System.out.println("Hello Gradle!");`, тогда он будет печататься на консоли.

###  Что вы можете сделать в сборке script?

Простым примером является то, что вам нужно скопировать некоторые файлы из одного каталога в другой до того, как произойдет фактический процесс сборки. A gradle build script может это сделать.

 

Это новый инструмент сборки, который Google хочет использовать для Android. Он используется благодаря тому, что он более расширяемый и полезен, чем ant. Он призван расширить возможности разработчиков.

Вы можете поговорить с Xavier Ducrohet из команды разработчиков Android на [Google I/O](http://www.youtube.com/watch?v=LCJAgPkpmR0) здесь.

В Google I/O здесь также есть еще одна беседа в Android Studio от Xavier и Tor Norbye, а также .

 

1 - `Gradle` Фоновая информация.

2 - `Gradle`.

3 - Фаза инициализации.

4 - Фаза инициализации (Продолжение).

5 - Что такое `Gradle`?.

6 - Фаза конфигурации.

 ![Gradle]()

 ![enter image description here]()

 ![enter image description here]()

 ![enter image description here]()

 ![enter image description here]()

 ![enter image description here]()

Смотрите [LINK](http://rominirani.com/2014/07/28/gradle-tutorial-part-2-java-projects/)

 

  **Gradle** - это система сборки, работающая на  **Android Studio**.

В других языках, например:

* [Ant](http://ant.apache.org/) и [Maven](https://maven.apache.org/)  **Java**
* [Rake](https://github.com/ruby/rake)  **Ruby**
* [A-A-P](http://www.a-a-p.org/)  **C**
* [NAnt](http://nant.sourceforge.net/) **.NET**
* [Make](https://www.gnu.org/software/make/) в  **Linux**

 

 Вот подробное объяснение о том, что такое `Gradle` и как его использовать в Android Studio.

  **Изучение файлов Gradle**

 1. Каждый раз, когда вы создаете проект в Android Studio, система сборки автоматически генерирует все необходимые файлы сборки Gradle.

 **Файлы сборки Gradle**

 2. Файлы сборки Gradle используют `Domain Specific Language or DSL` для определения пользовательской логики сборки и взаимодействия со специфичными для Android элементами плагина Android для Gradle.
3. Проекты Android Studio состоят из одного или нескольких модулей, которые вы можете создавать, тестировать и отлаживать независимо. Каждый модуль имеет свой собственный файл сборки, поэтому каждый проект Android Studio содержит 2 вида файлов сборки Gradle.
4. **Файл сборки верхнего уровня.** Здесь вы найдете параметры конфигурации, общие для всех модулей, составляющих ваш проект.
5. **Файл сборки на уровне** модуля. Каждый модуль имеет свой собственный файл сборки Gradle, который содержит специфичные для модуля настройки сборки. Вы потратите большую часть своего времени на редактирование файлов сборки уровня модуля, а не файла сборки верхнего уровня проекта.

 Чтобы взглянуть на эти файлы `build.gradle`, откройте панель "Проект Android Studio" (выбрав вкладку "Проект") и разверните папку "Сценарии Gradle". Первые два элемента в папке Gradle Scripts - это файлы сборки Gradle уровня проекта и уровня модуля.

  **Файл сборки Gradle верхнего уровня**

  Каждый проект Android Studio содержит один файл сборки Gradle верхнего уровня. Этот файл `build.gradle` является первым элементом, который появляется в папке Gradle Scripts и четко помечен как Project.

 
>   В большинстве случаев вам не нужно вносить какие-либо изменения в этот файл, но все равно полезно понимать его содержимое и роль, которую он играет в вашем проекте.
> 
> 

  **Файлы сборки Gradle уровня модуля**

  В дополнение к файлу сборки Gradle уровня проекта каждый модуль имеет собственный файл сборки Gradle. Ниже приведена аннотированная версия базового файла сборки Gradle на уровне модуля.

  **Другие файлы Gradle**

  В дополнение к файлам build.gradle ваша папка Gradle Scripts содержит некоторые другие файлы Gradle. В большинстве случаев вам не нужно будет вручную редактировать эти файлы, так как они будут обновляться автоматически при внесении любых соответствующих изменений в ваш проект. Тем не менее, полезно понять, какую роль эти файлы играют в вашем проекте.

  **gradle-wrapper.properties (версия Gradle)**

  Этот файл позволяет другим людям создавать ваш код, даже если на их компьютере не установлен Gradle. Этот файл проверяет, установлена ли правильная версия Gradle, и при необходимости загружает необходимую версию.

  **settings.gradle**

  Этот файл ссылается на все модули, которые составляют ваш проект.

  **gradle.properties (Свойства проекта)**

 
>   Этот файл содержит информацию о конфигурации всего вашего проекта. По умолчанию он пуст, но вы можете применить к своему проекту широкий спектр свойств, добавив их в этот файл.
> 
> 

  **local.properties (Расположение SDK)**

  Этот файл сообщает плагину Android Gradle, где он может найти вашу установку Android SDK.

  Примечание. `local.properties` содержит информацию, относящуюся к локальной установке Android SDK. Это означает, что вы не должны держать этот файл под контролем исходного кода.

  [Предлагаемое чтение - Tutsplus Tutorial](http://code.tutsplus.com/tutorials/the-ins-and-outs-of-gradle--cms-22978)

  Я получил ясное понимание Gradle из этого.

 

 Gradle - это один из инструментов  **сборки**, который создает исходный код программы. Таким образом, это важная часть Android Studio, и ее необходимо установить перед началом разработки приложения.

Мы не должны устанавливать его отдельно, потому что Android Studio делает это для нас, когда мы делаем наш первый проект.

 

Вы можете найти все, что вам нужно знать о Gradle здесь:
[Gradle Руководство пользователя плагина](http://tools.android.com/tech-docs/new-build-system/user-guide)

>  ###  Цели новой системы сборки
> 
>  Цели новой системы сборки:
> 
>  * Упростите использование кода и ресурсов
> * Упростите создание нескольких вариантов приложения, будь то для распространения с несколькими apk или для разных вкусов приложения.
> * Упростите настройку, расширение и настройку процесса сборки.
> * Хорошая интеграция с IDE
> 
> ###  Почему Gradle?
> 
>   Gradle - это усовершенствованная система сборки, а также расширенная сборка инструментарий, позволяющий создавать пользовательскую логику сборки через плагины.
> 
>  Вот некоторые из его функций, которые заставили нас выбрать Gradle:
> 
>  * Специфичный для домена язык (DSL) для описания логики построения и управления им.
> * Файлы сборки основаны на Groovy и позволяют смешивать декларативные элементы через DSL и использовать код для управления элементами DSL для обеспечения пользовательской логики.
> * Встроенное управление зависимостями через Maven и/или Ivy.
> * Очень гибкий. Позволяет использовать передовые методы, но не делает свой собственный способ делать что-то.
> * Плагины могут предоставлять свои собственные DSL и свой собственный API для использования файлов сборки.
> * Хороший инструмент API, позволяющий интегрировать IDE
> 

 

  **ОПРЕДЕЛЕНИЕ::** Gradle можно описать структурированный механизм построения, где он предоставляет разработчику инструменты и гибкость для управления ресурсами проекта для создания сборок `smaller in size`, `targeting specific requirements` для определенных устройств определенных конфигураций

---

  **ОСНОВНЫЕ КОНФИГУРАЦИИ**

* `minimumSdk`
* `maximumSdk`
* `targettedSdk`
* `versionCode`
* `versionName`

---

  **БИБЛИОТЕКИ::**
Мы можем добавить библиотеки андроидов или любые другие сторонние библиотеки, в дополнение к требованиям, которые были утомительной задачей раньше. Если библиотека не подходит для существующего проекта, разработчику отображается журнал, в котором человек может найти подходящее решение для внесения изменений в проект, чтобы библиотека могла быть добавлена. Его только одна строка зависимости

---

  **ГЕНЕРИРУЮЩИЕ СВОЙСТВА СТРОЕНИЙ**

Сочетание типов сборки со сборками для получения разновидностей переменных сборки

```
 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

```

---

  **СОКРАЩЕННЫЙ РАЗМЕР**

 Gradle помогает уменьшить размер сгенерированной сборки, удалив неиспользуемые ресурсы и неиспользуемые вещи из интегрированных библиотек

---

  **УПРАВЛЕНИЕ РАЗРЕШЕНИЯМИ**

Мы можем указать определенные разрешения для определенных сборок путем добавления определенных разрешений в определенных сценариях на основе требований

---

  **ПОСТРОЕНИЯ ДЛЯ НЕКОТОРЫХ УСТРОЙСТВ**

Мы можем управлять генерацией сборки для определенных устройств, которые включают определенную плотность и определенные уровни api. Это помогает при развертывании продукта в магазине приложений в соответствии с требованиями к различным типам устройств.

---

  **ДОПОЛНИТЕЛЬНАЯ СПРАВКА**

 [Vogella Tutorials](http://www.vogella.com/tutorials/AndroidBuild/article.html)

 

 Gradle является [системой сборки](http://www.cs.virginia.edu/~dww4s/articles/build_systems.html).  **Системы сборки** - это программные средства, предназначенные для автоматизации процесса компиляции программ. Системы сборки бывают разных форм и используются для различных задач сборки программного обеспечения. Хотя их основная цель - эффективно создавать исполняемые файлы.

Другим связанным термином является автоматизация сборки, которая является процессом автоматизации создания программного обеспечения и связанных с ним процессов, включая: компиляцию исходного кода компьютера в двоичный код, упаковку двоичного кода и выполнение автоматических тестов.

Несколько подобных систем сборки для других языков (см. полный список [здесь](https://en.wikipedia.org/wiki/List_of_build_automation_software)):

* Apache Ant и Apache Maven - Java
* sbt (Simple Build Tool) - для Scala (среда воспроизведения и т.д.)
* A-A-P - инструмент построения на основе Python
* Rake (Apache Builder) - Ruby
* [Leiningen](http://leiningen.org/) для Clojure

 

Рискуя быть дискурсивным, я думаю, что за этим стоит вопрос о том, почему опыт Android Studio/ Gradle настолько плох.

Типичный Clojure опыт:

* загрузить проект с зависимостями, указанными в project.clj.
* Leiningen получает зависимости благодаря Clojars и Maven.
* Скомпилирован проект.

Типичный опыт работы с Android Studio/ Gradle:

* "Импортировать проект Eclipse".
* OK проект импортирован.
* Gradle делает это thang... wait... wait... wait... Gradle завершено.
* Компиляция... не может скомпилироваться, потому что я не знаю, что X есть/не может найти библиотеку Y.

Я не уверен, что это ошибка Gradle. Но "импорт из проекта Eclipse" выглядит довольно flaky. Для всех Gradle предполагаемых изысканностей и достоинств системы сборки Android Studio, похоже, не очень хорошо импортирует зависимости сборки или процесс сборки из Eclipse.

Он не сообщает вам, когда ему не удалось импортировать полный граф зависимостей. Android Studio не дает никакой полезной помощи или советов о том, как решить проблему. Он не говорит вам, где вы можете вручную посмотреть в папках Eclipse. Это не говорит вам, какая библиотека, кажется, отсутствует. Или помогите вам найти Maven и т.д. Для них.

В 2016 году такие вещи, как Leiningen/Clojars, или node npm, или Python pip, или Debian apkg (и я уверен, что многие аналогичные менеджеры пакетов для других языков и систем) работают красиво... отсутствуют зависимости в прошлом.

За исключением Android. Android Studio теперь единственное место, где я все еще, кажется, испытываю недостаток адвентиля.

Я склонен сказать, что это ошибка Google. Они сломали экосистему Android (и тысячи существующих Android-проектов/онлайн-уроков), когда они кавалерически решили перейти от Eclipse к Android Studio/ Gradle без создания надежного процесса преобразования. Люди, чьи проекты работают в Eclipse, не адаптируют их к AS (по-видимому, потому, что это боль для них). И люди, пытающиеся использовать эти проекты в AS, сталкиваются с теми же проблемами.

И вообще, если Gradle - это супермощная система сборки, почему я все еще управляю множеством других зависимостей в sdk-менеджере? Почему проект, который не нуждается, например, ndk, указывает это в своем файле Gradle, чтобы он автоматически устанавливался и включался при необходимости? Почему NDK особенный? Точно так же для целевых платформ? Почему я устанавливаю их явно в среде IDE, а не просто проверяю свой проект на них и все это сортируется для меня за кулисами?

 

 **Я ссылаюсь на два урока, чтобы написать ответ** [один](https://www.quora.com/What-is-Gradle), [два](http://www.drdobbs.com/jvm/why-build-your-java-projects-with-gradle/240168608?pgno=1)

  **Gradle** - это универсальный, декларативный инструмент для сборки. Это общая цель, потому что она может быть использована для создания практически всего, что вы хотите реализовать в сценарии сборки. Это декларативно, так как вы не хотите видеть много кода в файле сборки, который не читается и менее удобен в обслуживании. Таким образом, в то время как Gradle предоставляет идею соглашений и простой и декларативной сборки, он также делает инструмент адаптируемым и расширяет возможности разработчиков. Он также предоставляет простой способ настройки поведения по умолчанию и различных хуков для добавления сторонних функций.

 
>   Gradle объединяет в себе все преимущества обоих инструментов, предоставляет дополнительные функции и использует Groovy как язык, специфичный для предметной области (DSL). Он обладает мощью и гибкостью инструмента Ant с такими функциями Maven, как жизненный цикл сборки и простота использования.
> 
> 

  **Почему Градл?** **Почему сейчас?**

  Ответ инструмента сборки - добавить функциональность сценариев с помощью нестандартных механизмов расширения. Вы заканчиваете тем, что смешиваете код сценария с XML или вызываете внешние сценарии из своей логики сборки. Легко представить, что вам нужно будет добавлять все больше и больше пользовательского кода с течением времени. В результате вы неизбежно вносите случайную сложность, и ремонтопригодность выходит за рамки.

 
>   Допустим, вы хотите скопировать файл в определенное место при создании релизной версии вашего проекта. Чтобы определить версию, вы проверяете строку в метаданных, описывающую ваш проект. Если он соответствует определенной схеме нумерации (например, 1.0-RELEASE), вы копируете файл из точки A в точку B. С внешней точки зрения это может показаться тривиальной задачей. Если вам приходится полагаться на XML, язык сборки многих традиционных инструментов, выражающих эту простую логику, становится довольно сложным.
> 
> 

  **Эволюция инструментов сборки Java**

 
>   Логика сборки Java должна быть описана в XML. XML отлично подходит для описания иерархических данных, но ему не хватает выражения программного потока и условной логики. По мере усложнения сценария сборки поддержание кода сборки становится кошмаром.
> 
> 

  **В Ant** вы делаете цель JAR зависимой от цели компиляции. Муравей не дает никаких указаний о том, как структурировать ваш проект. Хотя это обеспечивает максимальную гибкость, Ant делает каждый скрипт сборки уникальным и трудным для понимания. Внешние библиотеки, необходимые для вашего проекта, обычно проверяются на контроль версий, потому что нет никакого автоматизированного механизма для их извлечения из центрального расположения.

  **Maven 1**, выпущенный в июле 2004 года, попытался облегчить этот процесс. Он предоставил стандартизированную структуру проекта и директории, а также управление зависимостями. К сожалению, пользовательскую логику сложно реализовать

  **Gradle** вписывается в это поколение инструментов сборки и удовлетворяет многим требованиям современных инструментов сборки (рисунок 1). Это обеспечивает выразительный DSL, соглашение по конфигурации подхода и мощное управление зависимостями. Это делает правильный шаг, чтобы отказаться от XML и представить динамический язык Groovy для определения вашей логики сборки. Звучит убедительно, не так ли?

  **Gradle сочетает в себе лучшие функции других инструментов сборки.**

  [![enter image description here]()](/img/c86a23fa99e9288f65846063e00b5ce8.gif)

  **Gradle Compelling Набор функций**

  [![enter image description here]()](/img/2c39465c8cc6e57b8aa05439fd46ed75.gif)

  **Зачем создавать свои проекты Java с Gradle, а не с Ant или Maven?**

 
>   **Инструмент сборки по умолчанию для Android (и новая звезда инструментов сборки в JVM) предназначен для упрощения создания сценариев сложных многоязычных сборок.** **Стоит ли переходить на него, если вы используете Ant или Maven?**
> 
> 

  Ключ к разблокировке возможностей Power от Gradle в вашем скрипте сборки лежит в обнаружении и применении его доменной модели, как показано на рисунке ниже. [![enter image description here]()](/img/ef583f9b821a3418609e841b94bc9131.gif)

  Gradle не может знать все требования, специфичные для вашей корпоративной сборки. Предоставляя перехватчики на этапах жизненного цикла, Gradle позволяет отслеживать и настраивать поведение выполнения сценария сборки.

 
>   **Gradle устанавливает словарь для своей модели, выставляя DSL, реализованный в Groovy.** **При работе со сложной проблемной областью в этом случае мощным инструментом может быть задача создания программного обеспечения, позволяющего использовать общий язык для выражения своей логики.**
> 
>   Другой пример - способ выражения зависимостей во внешних библиотеках, очень распространенная проблема, решаемая инструментами сборки. Готовый Gradle предоставляет вам два блока конфигурации для вашего скрипта сборки, которые позволяют вам определить зависимости и репозитории, из которых вы хотите их получить. Если стандартные элементы DSL не соответствуют вашим потребностям, вы даже можете ввести свой собственный словарь через механизм расширения Gradle.
> 
> 

  **Интеграция с другими инструментами сборки**

  Gradle хорошо играет с муравьями предшественника, Maven и Ivy, как показано на рисунке ниже.

  [![enter image description here]()](/img/cedf4dc951361eb7946334f06e41dd8e.gif)

  **Автоматизация вашего проекта от сборки до развертывания**

  [![enter image description here]()](/img/d02e7a8f3022cf7d3b86a9541c0aa855.gif)

  **На изображении: этапы конвейера развертывания.**

 * Компиляция кода
* Работающие юнит и интеграционные тесты
* Выполнение статического анализа кода и создание тестового покрытия
* Создание дистрибутива
* Обеспечение целевой среды
* Развертывание результата
* Выполнение дымовых и автоматических функциональных испытаний

 **Я ссылаюсь на два урока, чтобы написать ответ** [один](https://www.quora.com/What-is-Gradle), [два](http://www.drdobbs.com/jvm/why-build-your-java-projects-with-gradle/240168608?pgno=1)

 

 `Gradle` - это усовершенствованная система сборки, а также расширенный инструментарий сборки, позволяющий создавать собственную логику сборки с помощью плагинов!

  **Преимущества:**

 * Dsl - предметно-ориентированный язык, основанный на groovy
* DAG - Направленный ациклический граф
* Инкрементные сборки
* Расширяемая модель предметной области
* Gradle всегда в курсе
* Перед выполнением задачи Gradle делает снимок ввода и вывода своих задач.
* В случае, если моментальный снимок изменился или его не существует, Gralde выполнит re- эту задачу.

 **Манифест записей**

  Через DSL можно настроить следующие записи манифеста:

  **Вариант сборки**

  По умолчанию плагин Android автоматически настраивает проект на создание как отладочной, так и выпускной версии приложения.

  **зависимости**

 1. Местные зависимости:

>   Если в вашей локальной файловой системе есть бинарные архивы, от которых зависит модуль, например, файлы JAR, вы можете объявить эти зависимости в файле сборки для этого модуля.
> 
> 

 2. Удаленные зависимости:

>   Сначала репозиторий должен быть добавлен в список, а затем зависимость должна быть объявлена таким образом, чтобы Maven или Ivy объявляли свои артефакты.
> 
> 

 

 Gradle относится к языку JVM Groovy, что означает ant для Java. В принципе, это инструмент сборки Groovy. В отличие от Ant, он основан на полном Groovy языке. Например, вы можете написать код Groovy script в Gradle script, чтобы сделать что-то, а не полагаться на определенный язык домена.

Я не знаю специфической интеграции IntelliJ, но представьте, что вы можете "расширить" Groovy, чтобы вы могли писать конкретные примитивы языка "build", и они просто стали частью языка Groovy. (Groovy метапрограммирование - это целая дискуссия для себя.) IntelliJ/Google может использовать Gradle для построения высокоуровневого языка компоновки, однако он основан на расширяемом открытом стандарте.

 

 Gradle - это автоматизированный набор инструментов для сборки, который может интегрироваться в множество разных сред не только для проектов Android.

Вот несколько вещей, которые вы можете сделать с помощью gradle.

* **Минимальная конфигурация, требуемая для новых проектов, поскольку Gradle имеет настройки по умолчанию для ваших проектов студии Android.**
* **Декларация о зависимости. Вы можете объявлять файлы jar зависимости или файлы библиотек, размещенные на локальном или удаленном сервере.**
* **Gradle автоматически генерирует тестовый каталог и тестовый APK из вашего источника проекта.**
* **Если вы добавите всю необходимую информацию, такую как `keyPassword` и `keyAlias`, в файл сборки Gradle, вы можете использовать Gradle для создания подписанных APK.**
* **Gradle может генерировать несколько APK с различными конфигурациями пакетов и сборки из одного модуля.**

 

 Gradle - это расширенный инструментарий сборки для Android, который управляет зависимостями и позволяет определять собственную логику сборки. функции похожи

 * Настройка, настройка и расширение процесса сборки.
* Создайте несколько APK для вашего приложения с различными функциями, используя один и тот же проект.
* Повторное использование кода и ресурсов.

 [обращаться](http://developer.android.com/sdk/installing/studio-build.html)

 

Одно из преимуществ Gradle, которое я нашел:

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

 

В Android Studio Gradle - это настраиваемый инструмент сборки, используемый для сборки пакетов андроида (файлы apk) путем управления зависимостями и предоставления пользовательской логики сборки.

Файл APK (пакет приложений для Android) представляет собой специально отформатированный zip файл, содержащий

* Байт-код
* Ресурсы (изображения, пользовательский интерфейс, xml и т.д.)
* Файл манифеста

Файл apk подписывается и помещается на устройство с использованием ADB (Android Debug Bridge), где он выполняется.

 

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

 

Система сборки Gradle предназначена для поддержки сложных сценариев при создании приложений для Android:

  **Мультираспределение**: одно и то же приложение должно быть настроено для нескольких клиентов или компаний.

  **Multi-apk:**, поддерживающий создание нескольких apk для разных типов устройств при повторном использовании частей кода

 

  **@Brian Gardner:**

 Gradle - это расширенный инструмент построения и менеджер зависимостей для проектов программирования. Он имеет специфический для домена язык, основанный на Groovy. Gradle также предоставляет поддержку по принципу "по отдельности" для многих типов проектов, включая Java, Android и Scala.

  **Функция Gradle:**

* Управление зависимостями
* Использование Ant из Gradle
* Gradle Плагины
* Плагин Java
* Плагин Android
* Многопроектные сборки

 

 Gradle - это то, что позволяет автоматизировать создание сложных Android-проектов, которые включают 10 тысяч строк кода из нескольких источников, проектов, библиотек и т.д. Он может условно генерировать несколько оптимизированных APK на основе множества конфигураций спецификации - если вы заинтересованы, другие ответы содержат более подробную информацию об этом аспекте Gradle.

Однако, если вы новичок в разработке Android, Gradle в 99% случаев - это то, что  **останавливает** ваш проект от строительства. Это непостижимая сложная система, которая эффективно запутывает процесс сборки Android и по существу делает его недоступным для неопытных разработчиков, т.е. Для создания простого Android-приложения начального уровня ничего не подозревающему новичкам, возможно, потребуется изучить и понять многие вещи, которые они не торговали за например:

* Структура и экосистема Android APK
* Android Studio
* Java-классы и зависимости
* Groovy
* Gradle скрипты сборки
* Многие другие сложные и интересные технологии

Все эти вещи интересны и полезны для разработчиков Android, но они далеки от простых и представляют собой серьезный барьер для входа. Я подозреваю, что то, что вдохновило OP на задание на этот вопрос, - это чувство разочарования, которое неизбежно поражает разработчика неофитов, слишком долго, пытаясь получить простое приложение для создания и постоянно пресекаться Gradle. Проблема усугубляется подавляющим количеством высокотехнологичной документации, доступной для всех этих технологий. Также для большого количества потребностей развития Gradle является излишним.

Альтернативой является создание оболочки script, которая создает ваш проект, автоматизируя инструменты, доступные в SDK для Android. Достоинства этого подхода много, для начала он, вероятно, лучший способ изучить и понять процесс сборки и экосистему Android, и это позволяет вам полностью контролировать, как ваше приложение построено. Однако этот подход более подходит для глубоко неоправданных технических руководителей, чем для неопытных noobs, опробовавших андроид.

Что видно из-за его отсутствия (пожалуйста, сообщите мне, если есть такая вещь), это начальный уровень, легкая среда разработки с уменьшенным набором функций, которая одновременно упрощает процесс сборки, а не затушевывает его (так что не netbeans или eclipse) возможно, все еще может использовать Gradle (что было не так с Ant). Это должно облегчить создание APK, которые соответствуют нескольким общим конфигурациям, и использовать структуру проекта, которая может развиваться до полного проекта Android Studio, если вы решите принять его таким образом.

 

Для более фундаментального и полного понимания `gradle` и `build system` проверьте этот курс udacity, созданный самими инженерами Gradle.

 [Gradle для Android и Java](https://www.udacity.com/course/gradle-for-android-and-java--ud867)

 

 Проще говоря, Gradle - это инструмент, предоставляемый Android Studio для реализации двух важных процессов:

 1. Строить наши проекты
2. Упакуйте файл AndroidManifest.xml, папку res и двоичный код в специально отформатированный zip файл APK

 

 Gradle = Groovy + Cradle [Hans Dockter комментарий на форуме](https://discuss.gradle.org/t/why-is-gradle-called-gradle/3226)

  Путаница немного ненужна, когда ее можно было бы просто назвать "Сборка" или что-то в Android Studio.

  Нам нравится усложнять себе жизнь в сообществе разработчиков.

 

 На простом языке Gradle - это инструмент для сборки. Вы можете легко синхронизировать весь проект с помощью инструмента Gradle. В Gradle есть множество функций, таких как изменение зависимостей, изменение minSdkVersion, compileSdkVersion, versionName, versionCode, также можно применять плагины.

 

a gradle - это то, что нужно, чтобы вы не спали по ночам, в отличие от "колыбели", которая должна помочь вам спать