Справочник по конфигурации Lightbuild

Конфигурация сборки проекта 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