Lightbuild 项目结构

Lightbuild 项目将应用组装与应用代码分开:应用模块(或“应用 shell”)负责组装应用,而库模块则包含应用的功能、界面和业务逻辑。本页面介绍了新 Lightbuild 项目的布局,以及每个模块和 build 文件的作用。

项目布局

默认 Lightbuild 项目模板包含以下 build 文件和模块:

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

该项目有三个 build 配置文件:根目录中的 project.lightbuild.yaml 文件,以及每个模块中的 lightbuild.yaml 文件。每个模块还有一个 resolved.deps 文件。如需详细了解每个配置文件中的设置,请参阅 Lightbuild 配置参考文档。

应用模块

Lightbuild 项目使用应用模块作为应用的基础。它也称为“应用 shell”,因为它负责处理项目组装,不包含任何源代码。所有功能和逻辑都保留在单独的库模块中,而应用 shell 则专注于最终配置,例如签名和优化。

应用模块的 lightbuild.yaml 文件会将模块的 type 设置为 application,并指定最终应用的组合方式,包括:

  • 应用的身份:应用 ID、版本代码和版本名称
  • 应用的 SDK 要求:其 compileSdk、minSdk 和 targetSdk 版本
  • 应用所依赖的模块,在本例中为 app-core

库模块

库模块包含应用模块组装的代码,例如应用的功能、界面组件和业务逻辑。在新项目模板中,app-core 库模块包含带有示例代码的 MainActivity.kt 文件。

库模块的 lightbuild.yaml 文件会将模块的 type 值设置为 library。库模块会定义其 compileSdk 和 minSdk 版本,但不支持 targetSdk 设置。库模块的 lightbuild.yaml 文件还会声明模块的依赖项、KSP 处理器和测试。

多个应用模块

一个项目可以有多个应用模块。Lightbuild 不支持传统意义上的产品变种和自定义 build 类型。而是为应用的每个版本(例如 dev 和 prod 版本,或 free 和 paid 版本)分别创建一个应用模块。

每个应用模块都依赖于其版本所需的库模块。应用模块可以共享库模块,依赖于不同的库模块来获取特定于版本的代码和设置(例如单独的依赖项注入 [DI] 模块),并省略版本不包含的功能的库模块。

例如,包含应用的免费版和付费版的项目可能具有以下模块:

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

每个应用模块都有自己的设置(例如应用 ID 和发布签名),因此您可以单独构建、安装和发布每个版本。如需构建特定版本,请在运行 build 命令时指定其应用模块。例如:

lightbuild build app-free

已解析的依赖项

Lightbuild 项目中的每个模块都包含一个 resolved.deps 文件,该文件记录了模块的所有已解析依赖项,包括传递依赖项。Lightbuild 会自动生成此文件,这样就不需要在您每次打开或构建项目时动态解析依赖项。您不应手动修改此文件。

将 resolved.deps 文件以及项目的 lightbuild.yaml 文件签入版本控制。

如需锁定依赖项(例如在 CI build 中),请将 --locked-dependencies 标志添加到 lightbuild resolve 或 lightbuild test。使用此标志后,如果 resolved.deps 文件与模块的依赖项不匹配,该命令会失败,而不是更新文件:

lightbuild resolve --locked-dependencies