Структура проекта Lightbuild

В проекте Lightbuild сборка приложения отделена от его кода: модуль приложения (или "оболочка приложения") собирает приложение, а модули библиотеки содержат его функции, пользовательский интерфейс и бизнес-логику. На этой странице описан макет нового проекта Lightbuild и роль каждого модуля и файла сборки.

Макет проекта

В стандартном шаблоне проекта Lightbuild есть следующие файлы сборки и модули:

MyApp/
├── project.lightbuild.yaml  # Project-wide settings
├── app/                     # App module
│   ├── lightbuild.yaml
│   └── resolved.deps
└── app-core/                # Library module
    ├── lightbuild.yaml
    ├── resolved.deps
    └── src/                 # The app's source code

В проекте есть три файла конфигурации сборки: файл project.lightbuild.yaml в корневом каталоге и файл lightbuild.yaml в каждом модуле. В каждом модуле также есть файл resolved.deps. Подробную информацию о настройках в каждом файле конфигурации можно найти в справочнике по конфигурации Lightbuild.

Модуль приложения

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

В файле lightbuild.yaml модуля приложения для свойства type задается значение application и указывается, как собирается итоговое приложение, в том числе:

  • Идентификационные данные приложения: идентификатор приложения, код и название версии.
  • Требования к SDK приложения: версии compileSdk, minSdk и targetSdk.
  • Модули, от которых зависит приложение, в этом примере – app-core.

Модули библиотеки

Модули библиотеки содержат код, который собирает модуль приложения, например функции приложения, компоненты пользовательского интерфейса и бизнес-логику. В новом шаблоне проекта модуль библиотеки app-core содержит файл MainActivity.kt с примером кода.

В файле lightbuild.yaml модуля библиотеки для параметра type задано значение library. Модули библиотек определяют версии compileSdk и minSdk, но не поддерживают настройку targetSdk. В файле lightbuild.yaml модуля библиотеки также объявляются зависимости модуля, процессоры KSP и тесты.

Несколько модулей приложения

В проекте может быть несколько модулей приложения. Lightbuild не поддерживает версии продукта и пользовательские типы сборки в традиционном понимании. Вместо этого вы создаете отдельный модуль приложения для каждой версии, например dev и prod или free и paid.

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

Например, проект с бесплатной и платной версиями приложения может содержать следующие модули:

MyApp/
├── project.lightbuild.yaml
├── app-free/   # App module for the free version
├── app-paid/   # App module for the paid version
├── core/       # Library module that both versions use
├── di-free/    # DI module for the free version
├── di-paid/    # DI module for the paid version
└── premium/    # Library module for paid-only features

Файл app-paid/lightbuild.yaml платной версии зависит от всех модулей платной версии:

android:
  applicationId: com.example.myapp.paid
  dependencies:
    module:
      - //core
      - //di-paid
      - //premium

Файл app-free/lightbuild.yaml бесплатной версии зависит от общего модуля core и собственного модуля DI, а модуль premium не используется:

android:
  applicationId: com.example.myapp.free
  dependencies:
    module:
      - //core
      - //di-free

У каждого модуля приложения есть собственные настройки, например идентификатор приложения и подпись выпуска, поэтому вы можете создавать, устанавливать и публиковать каждую версию отдельно. Чтобы создать определенную версию, укажите ее модуль приложения при выполнении команды build. Пример:

lightbuild build app-free

Разрешенные зависимости

Каждый модуль в проекте Lightbuild включает файл resolved.deps, в котором записаны все разрешенные зависимости модуля, включая транзитивные. Lightbuild генерирует этот файл автоматически, поэтому ему не нужно динамически разрешать зависимости каждый раз, когда вы открываете или собираете проект. Не редактируйте этот файл вручную.

Добавьте файлы resolved.deps в систему управления версиями вместе с файлами lightbuild.yaml проекта.

Чтобы заблокировать зависимости, например в сборке CI, добавьте флаг --locked-dependencies в lightbuild resolve или lightbuild test. Если файл resolved.deps не соответствует зависимостям модуля, команда не обновляет файл, а возвращает ошибку.

lightbuild resolve --locked-dependencies