Lightbuild 專案結構

Lightbuild 專案會將應用程式組件與應用程式程式碼分開:應用程式模組 (或「應用程式命令介面」) 會組合應用程式,而程式庫模組則包含應用程式的功能、UI 和商業邏輯。本頁面說明新 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,並指定最終應用程式的組合方式,包括:

  • 應用程式的身分:應用程式 ID、版本代碼和版本名稱
  • 應用程式的 SDK 規定:compileSdk、minSdk 和 targetSdk 版本
  • 應用程式依附的模組,在本例中為 app-core

程式庫模組

程式庫模組包含應用程式模組組合的程式碼,例如應用程式的功能、UI 元件和商業邏輯。在新專案範本中,app-core 程式庫模組包含含有程式碼範例的 MainActivity.kt 檔案。

程式庫模組的 lightbuild.yaml 檔案會將模組的 type 值設為 library。程式庫模組會定義 compileSdk 和 minSdk 版本,但不支援 targetSdk 設定。程式庫模組的 lightbuild.yaml 檔案也會宣告模組的依附元件、KSP 處理器和測試。

多個應用程式模組

一個專案可以有多個應用程式模組。Lightbuild 不支援傳統意義上的產品變種版本和自訂建構類型。而是為每個應用程式版本建立獨立的應用程式模組,例如 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 建構作業中),請將 --locked-dependencies 旗標新增至 lightbuild resolve 或 lightbuild test。使用這個旗標時,如果 resolved.deps 檔案與模組的依附元件不符,指令會失敗,而不會更新檔案:

lightbuild resolve --locked-dependencies