Struktur project Lightbuild

Project Lightbuild memisahkan perakitan aplikasi dari kode aplikasi: modul aplikasi (atau "app shell") merakit aplikasi Anda, dan modul library berisi fitur, UI, dan logika bisnis aplikasi Anda. Halaman ini menjelaskan tata letak project Lightbuild baru serta peran setiap modul dan file build.

Tata letak project

Template project Lightbuild default memiliki file dan modul build berikut:

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

Project ini memiliki tiga file konfigurasi build: file project.lightbuild.yaml di direktori root, dan file lightbuild.yaml di setiap modul. Setiap modul juga memiliki file resolved.deps. Untuk mengetahui detail tentang setelan di setiap file konfigurasi, lihat Referensi konfigurasi Lightbuild.

Modul aplikasi

Project Lightbuild menggunakan modul aplikasi sebagai dasar untuk aplikasi Anda. Modul ini juga disebut sebagai "app shell" karena menangani perakitan project tanpa berisi kode sumber apa pun. Semua fitur dan logika Anda tetap berada dalam modul library terpisah, dan app shell berfokus pada konfigurasi akhir, seperti penandatanganan dan pengoptimalan.

File lightbuild.yaml modul aplikasi menetapkan type modul ke application dan menentukan cara aplikasi akhir digabungkan, termasuk hal berikut:

  • Identitas aplikasi: ID aplikasi, kode versi, dan nama versi
  • Persyaratan SDK aplikasi: versi compileSdk, minSdk, dan targetSdk-nya
  • Modul yang menjadi dependensi aplikasi, dalam contoh ini app-core

Modul library

Modul library berisi kode yang disusun oleh modul aplikasi, seperti fitur aplikasi, komponen UI, dan logika bisnis. Dalam template project baru, modul library app-core berisi file MainActivity.kt dengan kode contoh.

File lightbuild.yaml modul library menetapkan nilai type modul ke library. Modul library menentukan versi compileSdk dan minSdk, tetapi tidak mendukung setelan targetSdk. File lightbuild.yaml modul library juga mendeklarasikan dependensi, pemroses KSP, dan pengujian modul.

Beberapa modul aplikasi

Sebuah project dapat memiliki lebih dari satu modul aplikasi. Lightbuild tidak mendukung ragam produk dan jenis build kustom dalam pengertian tradisional. Sebagai gantinya, Anda membuat modul aplikasi terpisah untuk setiap versi aplikasi, seperti versi dev dan prod, atau versi free dan paid.

Setiap modul aplikasi bergantung pada modul library yang diperlukan versinya. Modul aplikasi dapat berbagi modul library, bergantung pada modul library yang berbeda untuk kode dan setelan khusus versi (seperti modul injeksi dependensi (DI) terpisah), dan mengabaikan modul library untuk fitur yang tidak disertakan dalam versi.

Misalnya, project dengan versi aplikasi gratis dan berbayar mungkin memiliki modul berikut:

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

File app-paid/lightbuild.yaml versi berbayar bergantung pada semua modul versi berbayar:

android:
  applicationId: com.example.myapp.paid
  dependencies:
    module:
      - //core
      - //di-paid
      - //premium

File app-free/lightbuild.yaml versi gratis bergantung pada modul core bersama dan modul DI-nya sendiri, serta mengabaikan modul premium:

android:
  applicationId: com.example.myapp.free
  dependencies:
    module:
      - //core
      - //di-free

Setiap modul aplikasi memiliki setelannya sendiri, seperti ID aplikasi dan penandatanganan rilis, sehingga Anda dapat mem-build, menginstal, dan memublikasikan setiap versi secara terpisah. Untuk mem-build versi tertentu, tentukan modul aplikasinya saat menjalankan perintah build. Contoh:

lightbuild build app-free

Dependensi yang diselesaikan

Setiap modul dalam project Lightbuild menyertakan file resolved.deps, yang mencatat semua dependensi modul yang telah diselesaikan, termasuk dependensi transitif. Lightbuild membuat file ini secara otomatis, sehingga tidak perlu menyelesaikan dependensi secara dinamis setiap kali Anda membuka atau mem-build project. Anda tidak boleh mengedit file ini secara manual.

Check in file resolved.deps ke kontrol versi, bersama dengan file lightbuild.yaml project Anda.

Untuk mengunci dependensi, misalnya dalam build CI, tambahkan flag --locked-dependencies ke lightbuild resolve atau lightbuild test. Dengan flag ini, perintah akan gagal jika file resolved.deps tidak cocok dengan dependensi modul, bukan mengupdate file:

lightbuild resolve --locked-dependencies