โปรเจ็กต์ Lightbuild จะแยกการประกอบแอปออกจากโค้ดแอป โดยโมดูลแอป (หรือ "App Shell") จะประกอบแอป และโมดูลไลบรารีจะมีฟีเจอร์, 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
โปรเจ็กต์มีไฟล์การกำหนดค่าบิลด์ 3 ไฟล์ ได้แก่ ไฟล์ project.lightbuild.yaml ในไดเรกทอรีราก และไฟล์ lightbuild.yaml ในแต่ละโมดูล แต่ละโมดูลยังมีไฟล์ resolved.deps ด้วย ดูรายละเอียดเกี่ยวกับการตั้งค่าในไฟล์การกำหนดค่าแต่ละไฟล์ได้ที่ข้อมูลอ้างอิงการกำหนดค่า Lightbuild
โมดูลแอป
โปรเจ็กต์ Lightbuild ใช้โมดูลแอปเป็นพื้นฐานสำหรับแอปของคุณ ซึ่งเรียกอีกอย่างว่า "App Shell" เนื่องจากจะจัดการการประกอบโปรเจ็กต์โดยไม่มีซอร์สโค้ดใดๆ ฟีเจอร์และตรรกะทั้งหมดจะยังคงอยู่ในโมดูลไลบรารีที่แยกต่างหาก และ App Shell จะมุ่งเน้นที่การกำหนดค่าขั้นสุดท้าย เช่น การรับรองและการเพิ่มประสิทธิภาพ
ไฟล์ lightbuild.yaml ของโมดูลแอปจะตั้งค่า type ของโมดูลเป็น application และระบุวิธีรวมแอปขั้นสุดท้ายเข้าด้วยกัน ซึ่งรวมถึงสิ่งต่อไปนี้
- ข้อมูลระบุตัวตนของแอป: รหัสแอปพลิเคชัน รหัสเวอร์ชัน และชื่อเวอร์ชัน
- ข้อกำหนด SDK ของแอป: เวอร์ชัน
compileSdk,minSdkและtargetSdk - โมดูลที่แอปต้องใช้ ซึ่งในตัวอย่างนี้คือ
app-core
โมดูลคลัง
โมดูลไลบรารีมีโค้ดที่โมดูลแอปประกอบขึ้น เช่น ฟีเจอร์ของแอป คอมโพเนนต์ UI และตรรกะทางธุรกิจ ในเทมเพลตโปรเจ็กต์ใหม่ โมดูลไลบรารี app-core จะมีไฟล์ MainActivity.kt พร้อมโค้ดตัวอย่าง
ไฟล์ lightbuild.yaml ของโมดูลไลบรารีจะตั้งค่า type ของโมดูลเป็น library โมดูลไลบรารีจะกำหนดเวอร์ชัน compileSdk และ minSdk แต่ไม่รองรับการตั้งค่า targetSdk ไฟล์ lightbuild.yaml ของโมดูลไลบรารียังประกาศทรัพยากร Dependency, โปรเซสเซอร์ KSP และการทดสอบของโมดูลด้วย
โมดูลแอปหลายรายการ
โปรเจ็กต์หนึ่งมีโมดูลแอปได้มากกว่า 1 โมดูล Lightbuild ไม่รองรับเวอร์ชันผลิตภัณฑ์และประเภทบิลด์ที่กำหนดเองในรูปแบบเดิม แต่คุณต้องสร้างโมดูลแอปแยกต่างหากสำหรับแอปแต่ละเวอร์ชัน เช่น เวอร์ชัน dev และ prod หรือเวอร์ชัน free และ paid
โมดูลแอปแต่ละโมดูลจะขึ้นอยู่กับโมดูลไลบรารีที่เวอร์ชันของโมดูลนั้นต้องการ โมดูลแอปสามารถแชร์โมดูลไลบรารี โดยขึ้นอยู่กับโมดูลไลบรารีที่แตกต่างกันสำหรับโค้ดและการตั้งค่าเฉพาะเวอร์ชัน (เช่น โมดูล Dependency Injection (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
โมดูลแอปแต่ละโมดูลมีการตั้งค่าของตัวเอง เช่น รหัสแอปพลิเคชันและการรับรองการเผยแพร่ เพื่อให้คุณสร้าง ติดตั้ง และเผยแพร่แต่ละเวอร์ชันแยกกันได้ หากต้องการสร้างเวอร์ชันที่เฉพาะเจาะจง ให้ระบุโมดูลแอปเมื่อเรียกใช้คำสั่ง build เช่น
lightbuild build app-free
ทรัพยากร Dependency ที่แก้ไขแล้ว
แต่ละโมดูลในโปรเจ็กต์ Lightbuild จะมีไฟล์ resolved.deps ซึ่งจะบันทึกทรัพยากร Dependency ที่ได้รับการแก้ไขทั้งหมดของโมดูล รวมถึงทรัพยากร Dependency แบบทรานซิทีฟ Lightbuild จะสร้างไฟล์นี้โดยอัตโนมัติ เพื่อไม่ให้ต้องแก้ไขทรัพยากร Dependency แบบไดนามิกทุกครั้งที่คุณเปิดหรือสร้างโปรเจ็กต์ คุณไม่ควรแก้ไขไฟล์นี้ด้วยตนเอง
เช็คอินไฟล์ resolved.deps ลงในการควบคุมเวอร์ชันพร้อมกับไฟล์ lightbuild.yaml ของโปรเจ็กต์
หากต้องการล็อกทรัพยากร Dependency เช่น ในบิลด์ CI ให้เพิ่มแฟล็ก --locked-dependencies ลงใน lightbuild resolve หรือ lightbuild test เมื่อใช้แฟล็กนี้ คำสั่งจะดำเนินการไม่สำเร็จหากไฟล์ resolved.deps ไม่ตรงกับทรัพยากร Dependency ของโมดูล แทนที่จะอัปเดตไฟล์
lightbuild resolve --locked-dependencies
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- ข้อมูลอ้างอิงการกำหนดค่า Lightbuild
- สร้างโปรเจ็กต์ Lightbuild จากบรรทัดคำสั่ง
- เปรียบเทียบ Lightbuild กับ Kotlin DSL