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」視窗的根目錄。與 Kotlin DSL 中的 rootProject.name 一樣,這與應用程式名稱和應用程式 ID 不同。
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 存放區的網址。
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 應用程式的應用程式 ID。在應用程式模組中設定。
versionCode 應用程式的版本代碼。在應用程式模組中設定。
versionName 應用程式的版本名稱。在應用程式模組中設定。
packaging 封裝應用程式 debug 和 release 建構作業的設定,例如發布簽署。僅在應用程式模組中支援。詳情請參閱「包裝」。
dependencies 模組對其他模組和外部程式庫的依附元件。詳情請參閱「依附元件」。
kspProcessors 為模組產生程式碼的 KSP 處理器。詳情請參閱「KSP 處理器」。
tests 模組的本機和檢測設備測試。詳情請參閱「測試」。

SDK 版本

在 version.release.apiLevel 下,將 compileSdk、minSdk 和 targetSdk 設定指定為 API 級別。舉例來說,下列設定會根據 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:這個模組和依附於這個模組的模組會根據依附元件進行編譯。如果模組的公開 API 使用依附元件中的類型,請使用 public。
  • 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 程式碼產生器設定 Moshi:

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 會為 Protocol Buffers Lite 執行階段產生 Java 和 Kotlin 類別,建議用於 Android。

測試

在 tests 區塊中設定模組的測試:

  • test:在開發機器的 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 建構。如要使用自己的金鑰簽署發布子版本,請在 release 設定檔中新增 signing 區塊:

android:
  packaging:
    release:
      signing:
        storeFile: "${RELEASE_STORE_FILE}"
        storePassword: "${RELEASE_STORE_PASSWORD}"
        keyAlias: "${RELEASE_KEY_ALIAS}"
        keyPassword: "${RELEASE_KEY_PASSWORD}"

signing 區塊支援下列設定:

  • storeFile:金鑰儲存庫檔案的路徑,相對於模組目錄,或以 ~/ 開頭,代表主目錄中的位置。
  • storePassword:KeyStore 的密碼。
  • 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