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
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- Lightbuild 專案結構
- 透過指令列建構 Lightbuild 專案
- 比較 Lightbuild 與 Kotlin DSL