בפרויקט Lightbuild, הרכבת האפליקציה מופרדת מקוד האפליקציה: מודול אפליקציה (או "מעטפת אפליקציה") מרכיב את האפליקציה, ומודולים של ספרייה מכילים את התכונות, ממשק המשתמש והלוגיקה העסקית של האפליקציה. בדף הזה מתואר המבנה של פרויקט Lightbuild חדש, והתפקיד של כל מודול וקובץ build.
פריסת הפרויקט
בתבנית ברירת המחדל של פרויקט Lightbuild יש את קובצי ה-build והמודולים הבאים:
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
לפרויקט יש שלושה קובצי תצורת build: קובץ project.lightbuild.yaml בתיקיית השורש וקובץ lightbuild.yaml בכל מודול. בכל מודול יש גם קובץ resolved.deps. פרטים על ההגדרות בכל קובץ תצורה מופיעים בחומר העזר בנושא הגדרות Lightbuild.
מודול האפליקציה
פרויקטים ב-Lightbuild משתמשים במודול של אפליקציה כבסיס לאפליקציה. הוא נקרא גם "מעטפת אפליקציה" כי הוא מטפל בהרכבת הפרויקט בלי להכיל קוד מקור. כל התכונות והלוגיקה נשארות במודולים נפרדים של ספרייה, ומעטפת האפליקציה (app shell) מתמקדת בהגדרות הסופיות, כמו חתימה ואופטימיזציה.
בקובץ lightbuild.yaml של מודול האפליקציה, מגדירים את ה-type של המודול ל-application ומציינים איך האפליקציה הסופית מורכבת, כולל:
- זהות האפליקציה: מזהה האפליקציה, קוד הגרסה ושם הגרסה
- הדרישות של האפליקציה לגבי SDK: הגרסאות של
compileSdk,minSdkו-targetSdk - המודולים שהאפליקציה תלויה בהם, בדוגמה הזו
app-core
מודולים של הספרייה
מודולים של ספרייה מכילים את הקוד שמודול האפליקציה מרכיב, כמו התכונות של האפליקציה, רכיבי ממשק המשתמש והלוגיקה העסקית. בתבנית הפרויקט החדשה, מודול הספרייה app-core מכיל את הקובץ MainActivity.kt עם קוד לדוגמה.
בקובץ lightbuild.yaml של מודול הספרייה, הערך של type מוגדר כ-library. מודולים של ספרייה מגדירים את הגרסאות שלהם ל-compileSdk ול-minSdk, אבל הם לא תומכים בהגדרה targetSdk. בקובץ lightbuild.yaml של מודול הספרייה מצהירים גם על התלויות של המודול, על מעבדי KSP ועל בדיקות.
כמה מודולים של אפליקציות
בפרויקט יכול להיות יותר ממודול אחד של אפליקציה. Lightbuild לא תומך בגרסאות מוצר ובסוגי build בהתאמה אישית במובן המסורתי. במקום זאת, יוצרים מודול נפרד לכל גרסה של האפליקציה, כמו גרסאות 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
לכל מודול של אפליקציה יש הגדרות משלו, כמו מזהה האפליקציה וחתימת הגרסה, כך שאתם יכולים ליצור, להתקין ולפרסם כל גרסה בנפרד. כדי ליצור גרסה ספציפית, צריך לציין את מודול האפליקציה שלה כשמריצים את הפקודה build. לדוגמה:
lightbuild build app-free
יחסי תלות שנקבעו
כל מודול בפרויקט Lightbuild כולל קובץ resolved.deps, שמתעד את כל יחסי התלות שנפתרו במודול, כולל יחסי תלות טרנזיטיביים. Lightbuild יוצר את הקובץ הזה באופן אוטומטי, כדי שלא יהיה צורך לפתור יחסי תלות באופן דינמי בכל פעם שפותחים או יוצרים את הפרויקט. אל תערכו את הקובץ הזה באופן ידני.
מבצעים צ'ק-אין לקובצי resolved.deps בניהול הגרסאות, יחד עם קובצי lightbuild.yaml של הפרויקט.
כדי לנעול את יחסי התלות, למשל ב-build של CI, מוסיפים את הדגל --locked-dependencies ל-lightbuild resolve או ל-lightbuild test. עם הדגל הזה, הפקודה נכשלת אם קובץ resolved.deps לא תואם ליחסי התלות של המודול, במקום לעדכן את הקובץ:
lightbuild resolve --locked-dependencies
מומלץ עבורך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- הפניה להגדרות של Lightbuild
- פיתוח פרויקטים של Lightbuild משורת הפקודה
- השוואה בין Lightbuild ל-Kotlin DSL