การกำหนดค่าบิลด์ของโปรเจ็กต์ 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 จะแสดงชื่อนี้เป็นรูทของหน้าต่างโปรเจ็กต์ เช่นเดียวกับ rootProject.name ใน Kotlin DSL ซึ่งแยกจากชื่อแอปและรหัสแอปพลิเคชัน |
modules |
โมดูลในโปรเจ็กต์ เช่น โมดูลแอป (app) และโมดูลไลบรารี (app-core) |
repositories |
ที่เก็บระยะไกลที่ Lightbuild ใช้แก้ไขทรัพยากร Dependency โปรดดูรายละเอียดที่หัวข้อที่เก็บข้อมูล |
lightbuild.version |
เวอร์ชัน Lightbuild ที่โปรเจ็กต์ใช้ |
build.kotlin.version |
เวอร์ชัน Kotlin ที่โปรเจ็กต์ใช้ |
build.java.version |
เวอร์ชันคอมไพเลอร์ Java ที่โปรเจ็กต์ต้องการ |
build.jvmTarget |
เวอร์ชันเป้าหมายของ JVM Bytecode ที่สร้างขึ้น |
ที่เก็บ
ใช้ repositories เพื่อแสดงรายการที่เก็บที่ Lightbuild แก้ไขทรัพยากร Dependency คุณสามารถแสดงรายการที่เก็บ google และ mavenCentral ในตัว และเพิ่มที่เก็บ Maven ที่กำหนดเองด้วย maven:
repositories:
- google
- mavenCentral
- maven:
name: "Example Repo"
url: "https://maven.example.com/releases"
ที่เก็บ maven มีการตั้งค่าต่อไปนี้
| การตั้งค่า | คำอธิบาย |
|---|---|
name |
ชื่อที่เก็บ |
url |
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 |
รหัสแอปพลิเคชันของแอป ตั้งค่าในโมดูลแอป |
versionCode |
รหัสเวอร์ชันของแอป ตั้งค่าในโมดูลแอป |
versionName |
ชื่อเวอร์ชันของแอป ตั้งค่าในโมดูลแอป |
packaging |
การตั้งค่าสำหรับการแพ็กเกจ debug และ release บิลด์ของแอป เช่น การรับรองการเผยแพร่ รองรับเฉพาะในโมดูลแอป โปรดดูรายละเอียดที่หัวข้อบรรจุภัณฑ์ |
dependencies |
ทรัพยากร Dependency ของโมดูลในโมดูลอื่นๆ และในไลบรารีภายนอก โปรดดูรายละเอียดที่หัวข้อทรัพยากร Dependency |
kspProcessors |
โปรเซสเซอร์ KSP ที่สร้างโค้ดสำหรับโมดูล โปรดดูรายละเอียดที่หัวข้อโปรเซสเซอร์ KSP |
tests |
การทดสอบในเครื่องและการทดสอบการวัดคุมของโมดูล โปรดดูรายละเอียดที่หัวข้อการทดสอบ |
เวอร์ชัน SDK
ระบุการตั้งค่า compileSdk, minSdk และ targetSdk เป็นระดับ API ใน version.release.apiLevel ตัวอย่างเช่น การตั้งค่าต่อไปนี้จะคอมไพล์โมดูลกับ 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 เท่านั้น
ความสัมพันธ์
ประกาศทรัพยากร Dependency ของโมดูลในบล็อก dependencies ดังนี้
module: โมดูลอื่นๆ ในโปรเจ็กต์ ซึ่งเขียนเป็น//ตามด้วยชื่อโมดูล เช่น//app-coreหรือ//features/searchmaven: ไลบรารีภายนอกที่เขียนเป็นพิกัด Maven ในรูปแบบgroup:artifact:version
ตัวอย่างเช่น การตั้งค่าต่อไปนี้จะเพิ่มทรัพยากร Dependency ในโมดูล app-core และในไลบรารี AndroidX Core KTX
android:
dependencies:
module:
- //app-core
maven:
- androidx.core:core-ktx:1.18.0
การตั้งค่าการขึ้นต่อกัน
โดยค่าเริ่มต้น โมดูลจะคอมไพล์ตามทรัพยากร Dependency แต่ละรายการและรวมไว้ที่รันไทม์ แต่จะไม่แสดงต่อโมดูลที่ขึ้นอยู่กับโมดูลนั้น หากต้องการเปลี่ยนวิธีที่โมดูลใช้ทรัพยากร Dependency ให้เพิ่มโคลอนหลังทรัพยากร Dependency แล้วเพิ่มการตั้งค่า compile, การตั้งค่า runtime หรือทั้ง 2 อย่างด้านล่าง
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 จะควบคุมโมดูลที่คอมไพล์กับทรัพยากร Dependency ดังนี้
private(ค่าเริ่มต้น): โมดูลนี้จะคอมไพล์โดยอิงตามทรัพยากร Dependency แต่โมดูลที่ขึ้นอยู่กับโมดูลนี้จะไม่คอมไพล์public: โมดูลนี้และโมดูลที่ขึ้นอยู่กับโมดูลนี้จะคอมไพล์โดยอิงตามทรัพยากร Dependency ใช้publicเมื่อ API สาธารณะของโมดูลใช้ประเภทจากการขึ้นต่อกันoff: โมดูลนี้ไม่คอมไพล์กับทรัพยากร Dependency
การตั้งค่า runtime จะควบคุมว่าทรัพยากร Dependency พร้อมใช้งานที่รันไทม์หรือไม่
public(ค่าเริ่มต้น): ทรัพยากร Dependency พร้อมใช้งานที่รันไทม์สำหรับโมดูลนี้และโมดูลที่ขึ้นอยู่กับโมดูลนี้off: ทรัพยากร Dependency ไม่พร้อมใช้งานที่รันไทม์ ใช้offสำหรับทรัพยากร Dependency ที่โค้ดของคุณต้องการเฉพาะในเวลาคอมไพล์ เช่น คำอธิบายประกอบ
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
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 ของโมดูล และเพิ่มไลบรารีรันไทม์ของบัฟเฟอร์โปรโตคอลลงในทรัพยากร Dependency ของโมดูล 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 จะสร้างคลาส Java และ Kotlin สำหรับรันไทม์ Lite ของบัฟเฟอร์โปรโตคอล ซึ่งเป็นรันไทม์ที่แนะนำสำหรับ Android
การทดสอบ
กำหนดค่าการทดสอบของโมดูลในบล็อก tests ดังนี้
test: การทดสอบในเครื่องที่ทำงานบน JVM ของคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์ แสดงรายการทรัพยากร Dependency ของการทดสอบในส่วนdependenciesandroidTest: การทดสอบที่มีการวัดคุมซึ่งทำงานในอุปกรณ์หรือโปรแกรมจำลอง ตั้งค่าrunnerเป็นคลาส Test Runner และแสดงรายการทรัพยากร Dependency ของการทดสอบในส่วน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 ของแอป หากต้องการรับรองบิลด์ที่เผยแพร่ด้วยคีย์ของคุณเอง ให้เพิ่มบล็อก signing ลงในโปรไฟล์ release ดังนี้
android:
packaging:
release:
signing:
storeFile: "${RELEASE_STORE_FILE}"
storePassword: "${RELEASE_STORE_PASSWORD}"
keyAlias: "${RELEASE_KEY_ALIAS}"
keyPassword: "${RELEASE_KEY_PASSWORD}"
บล็อก signing รองรับการตั้งค่าต่อไปนี้
storeFile: เส้นทางไปยังไฟล์คีย์สโตร์ ซึ่งสัมพันธ์กับไดเรกทอรีของโมดูลหรือขึ้นต้นด้วย~/สำหรับตำแหน่งในไดเรกทอรีหลักstorePassword: รหัสผ่านของ KeystorekeyAlias: ชื่อแทนของคีย์ Signing ใน KeystorekeyPassword: รหัสผ่านของคีย์ Signing
หากต้องการเก็บรหัสผ่านไว้นอกไฟล์ของโปรเจ็กต์ ให้ตั้งค่าเหล่านี้เป็นการอ้างอิงตัวแปรสภาพแวดล้อมด้วยไวยากรณ์ ${NAME} ดังตัวอย่าง
คุณสามารถเขียน storeFile และ keyAlias ได้โดยตรง หรือจะอ้างอิงตัวแปรสภาพแวดล้อมสำหรับทั้ง 2 รายการก็ได้เช่นกัน เมื่อคุณสร้าง 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