Конфигурация сборки проекта Lightbuild состоит из файлов YAML: файла project.lightbuild.yaml в корневом каталоге проекта и файла lightbuild.yaml в каждом модуле. На этой странице описаны настройки в каждом файле.
Файл проекта
Глобальные настройки проекта хранятся в файле project.lightbuild.yaml в корневом каталоге проекта. Пример:
project:
name: MyApp
modules:
- app
- app-core
repositories:
- google
- mavenCentral
lightbuild:
version: 0.0.30
build:
java:
version: 17
kotlin:
version: 2.3.20
jvmTarget: "17"
В таблице ниже описаны эти настройки.
| Параметр | Описание |
|---|---|
project.name |
Название проекта, например MyApp. Android Studio показывает это название в корне окна Project (Проект). Как и rootProject.name в Kotlin DSL, он не связан с названием и идентификатором приложения. |
modules |
Модули в проекте, например модуль приложения (app) и модули библиотеки (app-core). |
repositories |
Удаленные хранилища, из которых Lightbuild разрешает зависимости. Подробнее о хранилищах… |
lightbuild.version |
Версия Lightbuild, используемая в проекте. |
build.kotlin.version |
Версия Kotlin, используемая в проекте. |
build.java.version |
Версия компилятора Java, необходимая для проекта. |
build.jvmTarget |
Целевая версия сгенерированного байт-кода JVM. |
Хранилища
Используйте repositories, чтобы перечислить хранилища, из которых Lightbuild разрешает зависимости. Вы можете перечислить встроенные репозитории google и mavenCentral, а также добавить собственные репозитории Maven с помощью maven:
repositories:
- google
- mavenCentral
- maven:
name: "Example Repo"
url: "https://maven.example.com/releases"
У хранилища maven есть следующие настройки:
| Параметр | Описание |
|---|---|
name |
Название хранилища. |
url |
URL хранилища. |
credentials |
Необязателен. Ключи, которые сопоставляются с именем пользователя и паролем хранилища в файле local.properties. Подробнее об учетных данных хранилища… |
Учетные данные репозитория
Если для доступа к репозиторию Maven требуются имя пользователя и пароль, добавьте в него блок credentials. Значения username и password – это не сами учетные данные, а ключи, которые вы определяете в файле local.properties проекта:
repositories:
- google
- mavenCentral
- maven:
name: "Internal Repo"
url: "https://maven.example.com/releases"
credentials:
username: internalRepoUser
password: internalRepoPassword
Затем в файле local.properties проекта сопоставьте каждый ключ с его значением.
Замените REPO_USERNAME и REPO_PASSWORD своими учетными данными:
# Also define sdk.dir, the path to your Android SDK.
internalRepoUser=REPO_USERNAME
internalRepoPassword=REPO_PASSWORD
Файлы модулей
В каталоге каждого модуля есть файл lightbuild.yaml, в котором определены настройки модуля. В таблице ниже описаны настройки верхнего уровня.
| Параметр | Описание |
|---|---|
platform |
Платформа, для которой предназначен модуль: android. |
type |
Тип модуля: application для модуля приложения или library для модуля библиотеки. Подробнее о структуре проекта Lightbuild… |
optionalFeatures |
Дополнительные функции, которые можно включить для модуля, например com.android.tools.lightbuild.protobuf для поддержки буферов протокола. Подробнее о буферах протокола… |
android |
Настройки модуля для Android. Подробнее о настройках Android… |
Настройки Android
Блок android содержит настройки сборки модуля для Android:
| Параметр | Описание |
|---|---|
namespace |
Пространство имен модуля. Подробнее о том, как задать пространство имен… |
compileSdk |
Уровень API, с которым компилируется модуль. Подробнее о версиях SDK… |
minSdk |
Минимальный уровень API, который поддерживает модуль. |
targetSdk |
Уровень API, на который ориентировано приложение. Поддерживается только в модулях приложений. |
applicationId |
Идентификатор приложения. Задайте модули в приложении. |
versionCode |
Код версии приложения. Задайте модули в приложении. |
versionName |
Название версии приложения. Задайте модули в приложении. |
packaging |
Настройки для упаковки сборок debug и release приложения, например подпись выпуска. Поддерживается только в модуле приложения. Подробнее об упаковке… |
dependencies |
Зависимости модуля от других модулей и внешних библиотек. Подробнее о зависимостях… |
kspProcessors |
Процессоры KSP, которые генерируют код для модуля. Подробнее о процессорах KSP… |
tests |
Локальные и инструментальные тесты модуля. Подробнее о тестах… |
Версии SDK
Укажите настройки compileSdk, minSdk и targetSdk как уровни API в разделе version.release.apiLevel. Например, следующие настройки компилируют модуль для уровня API 36, поддерживают уровень API 24 и выше и нацелены на целевой уровень API 36:
android:
compileSdk:
version:
release:
apiLevel: 36
minSdk:
version:
release:
apiLevel: 24
targetSdk:
version:
release:
apiLevel: 36
Настройку targetSdk поддерживают только модули приложений. В модулях библиотек определяются только настройки compileSdk и minSdk.
Связанные запросы
Объявите зависимости модуля в блоке dependencies:
module– другие модули в проекте, которые записываются как//, за которым следует название модуля, например//app-coreили//features/search.maven– внешние библиотеки, записанные в виде координат Maven в форматеgroup:artifact:version.
Например, следующие настройки добавляют зависимости от модуля app-core и библиотеки AndroidX Core KTX:
android:
dependencies:
module:
- //app-core
maven:
- androidx.core:core-ktx:1.18.0
Настройки зависимостей
По умолчанию модуль компилируется с учетом всех своих зависимостей и включает их во время выполнения, но не предоставляет их модулям, которые зависят от него. Чтобы изменить способ использования зависимости модулем, добавьте двоеточие после зависимости, а затем добавьте параметр compile, параметр runtime или оба параметра под ним:
android:
dependencies:
module:
- //data:
compile: public
maven:
- androidx.core:core-ktx:1.18.0
- androidx.annotation:annotation:1.9.1:
runtime: off
В этом примере модули, которые зависят от этого модуля, также могут использовать классы модуля data. Библиотека Jetpack Annotation используется только для компиляции этого модуля. В Core KTX используются настройки по умолчанию.
Настройка compile определяет, какие модули компилируются с зависимостью:
private(по умолчанию). Модуль компилируется с зависимостью, но модули, которые зависят от него, – нет.public– этот модуль и модули, которые от него зависят, компилируются с учетом зависимости. Используйтеpublic, если в общедоступном API вашего модуля используются типы из зависимости.off: этот модуль не компилируется с зависимостью.
Настройка runtime определяет, доступна ли зависимость во время выполнения:
public(по умолчанию) – зависимость доступна во время выполнения для этого модуля и модулей, которые от него зависят.off: зависимость недоступна во время выполнения. Используйтеoffдля зависимостей, которые нужны коду только во время компиляции, например для аннотаций.
compile и runtime не могут быть одновременно off. В зависимостях тестирования compile может быть только private или off.
Чтобы узнать, как эти настройки соотносятся с конфигурациями Kotlin DSL, такими как api и compileOnly, прочитайте статью Сравнение Lightbuild с Kotlin DSL.
Процессоры KSP
Чтобы использовать генератор кода на основе Kotlin Symbol Processing (KSP), например Moshi или Room, добавьте процессор в блок kspProcessors, а библиотеки, которые ваш код использует во время выполнения, – в блок dependencies. Lightbuild автоматически применяет плагин KSP и настраивает генерацию кода во время сборки.
Например, следующие настройки настраивают Moshi с помощью генератора кода KSP:
android:
dependencies:
maven:
- com.squareup.moshi:moshi:1.15.2
- com.squareup.moshi:moshi-kotlin:1.15.2
kspProcessors:
maven:
- com.squareup.moshi:moshi-kotlin-codegen:1.15.2
Буферы протоколов
Чтобы сгенерировать код из файлов буферов протокола (.proto) в модуле библиотеки, добавьте функцию буферов протокола в список optionalFeatures модуля, а библиотеки среды выполнения буферов протокола – в зависимости модуля. optionalFeatures – это настройка верхнего уровня, которая находится за пределами блока android:
optionalFeatures:
- com.android.tools.lightbuild.protobuf
android:
dependencies:
maven:
- com.google.protobuf:protobuf-javalite:4.28.2
- com.google.protobuf:protobuf-kotlin-lite:4.28.2
Поместите файлы .proto модуля в его каталог src/main/proto. При сборке модуля Lightbuild генерирует классы Java и Kotlin для облегченной среды выполнения буферов протокола, которая рекомендуется для Android.
Тесты
Настройте тесты модуля в блоке tests:
test– локальные тесты, которые выполняются на виртуальной машине Java (JVM) компьютера для разработки. Перечислите зависимости тестов в разделеdependencies.androidTest– инструментальные тесты, которые выполняются на устройстве или в эмуляторе. Укажите класс средства запуска тестов вrunnerи перечислите зависимости тестов вdependencies.
Пример:
android:
tests:
test:
dependencies:
maven:
- junit:junit:4.13.2
androidTest:
runner: androidx.test.runner.AndroidJUnitRunner
dependencies:
maven:
- androidx.test.ext:junit:1.3.0
- androidx.test.espresso:espresso-core:3.7.0
Упаковка
В модулях приложения используйте блок packaging, чтобы настроить сборки debug и release. Чтобы подписать конечную сборку собственным ключом, добавьте блок signing в профиль release:
android:
packaging:
release:
signing:
storeFile: "${RELEASE_STORE_FILE}"
storePassword: "${RELEASE_STORE_PASSWORD}"
keyAlias: "${RELEASE_KEY_ALIAS}"
keyPassword: "${RELEASE_KEY_PASSWORD}"
Блок signing поддерживает следующие настройки:
storeFile– путь к файлу хранилища ключей, относительный к каталогу модуля или начинающийся с~/для местоположения в домашнем каталоге.storePassword– пароль хранилища ключей.keyAlias– псевдоним ключа подписи в хранилище ключей.keyPassword– пароль ключа подписи.
Чтобы не хранить пароли в файлах проекта, задайте эти значения в качестве ссылок на переменные среды с синтаксисом ${NAME}, как показано в примере.
Вы можете указать storeFile и keyAlias напрямую или сослаться на переменные среды. При сборке Lightbuild заменяет каждую ссылку значением переменной среды. Каждое значение должно содержать только ссылку. Lightbuild не заменяет ссылку, которая является частью более длинного значения, например ${HOME}/upload-keystore.jks.
Примеры
Ниже приведены примеры полных файлов модулей для модуля приложения и модуля библиотеки.
Модуль приложения
В следующем файле app/lightbuild.yaml настраивается модуль приложения, который зависит от модуля библиотеки app-core:
platform: android
type: application
android:
namespace: com.example.myapp.app
compileSdk:
version:
release:
apiLevel: 36
minSdk:
version:
release:
apiLevel: 24
targetSdk:
version:
release:
apiLevel: 36
applicationId: com.example.myapp
versionCode: 1
versionName: "1.0"
dependencies:
module:
- //app-core
Модуль "Библиотека"
В следующем файле app-core/lightbuild.yaml настраивается модуль библиотеки, который использует Jetpack Compose и Moshi и содержит локальные и инструментальные тесты:
platform: android
type: library
android:
namespace: com.example.myapp
compileSdk:
version:
release:
apiLevel: 36
minSdk:
version:
release:
apiLevel: 24
dependencies:
maven:
- androidx.core:core-ktx:1.18.0
- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0
- androidx.activity:activity-compose:1.13.0
- androidx.lifecycle:lifecycle-runtime-compose:2.10.0
- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0
- androidx.compose.ui:ui:1.10.4
- androidx.compose.ui:ui-tooling-preview:1.10.4
- androidx.compose.material3:material3:1.4.0
- androidx.navigation3:navigation3-ui:1.0.1
- androidx.navigation3:navigation3-runtime:1.0.1
- androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0
- androidx.compose.ui:ui-tooling:1.10.4
- androidx.compose.ui:ui-test-manifest:1.10.4
- com.squareup.moshi:moshi:1.15.2
- com.squareup.moshi:moshi-kotlin:1.15.2
kspProcessors:
maven:
- com.squareup.moshi:moshi-kotlin-codegen:1.15.2
tests:
test:
dependencies:
maven:
- junit:junit:4.13.2
- org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2
androidTest:
runner: androidx.test.runner.AndroidJUnitRunner
dependencies:
maven:
- androidx.test:core:1.7.0
- androidx.test.ext:junit:1.3.0
- androidx.test:runner:1.7.0
- androidx.test.espresso:espresso-core:3.7.0
- androidx.compose.ui:ui-test-junit4:1.10.4
Рекомендуем
- Примечание. Текст ссылки показывается, когда JavaScript отключен.
- Структура проекта Lightbuild
- Как создавать проекты Lightbuild из командной строки
- Сравнение Lightbuild с Kotlin DSL