Понимание Gradle в проектах Flutter

Понимание Gradle в проектах Flutter

FlutterPulse

Эта статья переведена специально для канала FlutterPulse. В этом канале вы найдёте много интересных вещей, связанных с Flutter. Не забывайте подписываться! 🚀

Здравствуйте, разработчики Flutter

Сегодня я хочу поговорить с вами о немного колючей теме Бог даст, она будет простой и, возможно, поможет вам решить проблему

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

- Но сначала мы хотим знать, что именно делает папка Android, чтобы мы могли ознакомиться с темой.

= Функция этой папки — правильно собрать ваше Android-приложение. Ну, это через некоторые файлы внутри нее, включая,

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

= У нас есть два типа Gradle:

Уровень приложения: это находится в папке приложения и также отвечает за конфигурации уровня приложения, такие как namespace и applicationId.

Уровень проекта: это находится под папкой android и отвечает за конфигурации, специфичные для всего проекта, такие как настройка определенных класс-путей для Google Services, AGP и т. д.

= Есть некоторые конфигурации, которые можно разместить вне его в settings.gradle, такие как версия kotlin, например.

Примечание: Gradle написан на Groovy, стандартном языке для Gradle, или KTS (Kotlin script).
Это найдено в новых проектах.

Теперь давайте познакомимся с AGP и его отношением к версии Gradle.

  • Теперь, что такое AGP и как оно связано с версией gradle?

= По сути, оба создают задачи, специфичные для процесса сборки, и дополняют друг друга. Требуется совместимость для работы приложения с вами.

- Версия gradle находится в gradle-wrapper.properties.
Мы можем сказать, что это основа процесса сборки вашего приложения.
- Она создает задачи, такие как загрузка плагинов, и на основе них выполняется AGP. Следовательно, требуется совместимость между ними.

- AGP (Android Gradle Plugin) размещается на уровне проекта gradle.
- Какие задачи у него есть?
- Такие как упаковка в APK и AAP, и, возможно, компиляция и подписание приложения.
Таблица ниже иллюстрирует совместимость между ними.

Также есть связанная тема, о которой я хочу поговорить с вами, это namespace

найденный в app build.gradle. Что он делает?

По сути, он появился после AGP 7.0.0+, поэтому вы должны добавить его.
Через него вы можете уникально идентифицировать модули уровня приложения. Он также может помочь вам избежать проблем с много-модульными проектами, если у вас больше одного приложения внутри проекта и вы управляете ими через settings.gradle. Мы поговорим об этом через минуту.

Также существует ошибка, которая возникает, когда вы пытаетесь изменить старый проект и обновить его до более новой версии SDK. Для определенного плагина может появиться сообщение типа: "Не указано пространство имен. Пожалуйста, добавьте свойство `namespace`." Это связано с тем, что вы использовали AGP 7.0.0+, который уже устарел. Вы должны изменить его в пакете и добавить пространство имен.

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

затем мы можем изменить android manifest.xml, добавив новую активность

благодаря предыдущему коду запускается customMainActivity, поскольку в нем есть Intent Filter

таким образом, мы можем сказать, что активность, имеющая Intent Filter, запускается первой, и должно быть только одно такое активность, и мы можем определить, какая активность имеет Intent Filter и запускается с помощью Flavors

приложения с несколькими активностями будут выглядеть так

и мы соединим все, установив setting.gradle следующим образом:

и внесем изменения в android/build.gradle, добавив подпроекты

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

и эта статья подробно рассказывает о многоплановых проектах Gradle

https://docs.gradle.org/current/userguide/intro_multi_project_builds.html

Последнее, о чем мы поговорим, это версия Java (JDK) и версия Kotlin.

Итак, для чего они нужны и что делают?
В конечном итоге, их задача состоит в том, чтобы компилировать родной код, будь то из плагинов или класса MainActivity, будь то на Java, Kotlin или других языках.
И они должны быть совместимы с версией Gradle, как раз так.

Java 11–19 безопасна для Gradle по умолчанию (7.x) для Flutter,

Java 17 с Gradle ≥ 7.3,

Java 21+ требует Gradle 8+.

Эти версии загружаются с Android Studio, и вы можете изменить их, если версия, которая вам предоставлена с Android Studio, не совместима с Gradl и так далее.

Здесь вы найдете, как сделать совместимость между версией Kotlin, AGP и Gradle.

Настройка проекта Gradle | Kotlin

Чтобы собрать проект Kotlin с помощью Gradle, вам нужно добавить плагин Kotlin Gradle в файл скрипта сборки…

kotlinlang.org

В заключение, можно сказать, что версия Kotlin и версия Java, а также AGP и версия Gradle должны быть совместимы друг с другом, чтобы проект запустился корректно

Надеюсь, вам было полезно, и расскажите мне о своем мнении в комментариях.

Report Page