השוואה בין Lightbuild ל-Kotlin DSL

אם אתם יודעים איך להגדיר גרסאות build של Android באמצעות Kotlin DSL, בדף הזה מוסבר איך להמיר הגדרות נפוצות של Kotlin DSL ל-Lightbuild.

הדוגמאות בדף הזה משתמשות ב-Kotlin DSL ובפלאגין של Android Gradle‏ (AGP) מגרסה 9.0 ואילך, שכולל תמיכה מובנית ב-Kotlin.

קבצי build

בטבלה הבאה מוצג קובץ ה-build המקביל ב-Lightbuild לכל קובץ build ב-Kotlin DSL:

Kotlin DSL Lightbuild מטרה
settings.gradle.kts project.lightbuild.yaml שם הפרויקט, המודולים והמאגרים
שורש build.gradle.kts ו-gradle-wrapper.properties project.lightbuild.yaml גרסאות של כלי פיתוח ו-toolchain
מודול build.gradle.kts מודול lightbuild.yaml סוג המודול, הגדרות Android, יחסי תלות ובדיקות
gradle.lockfile resolved.deps מעקב אחרי גרסאות של יחסי תלות

הגדרות הפרויקט

ב-Kotlin DSL, הקובץ settings.gradle.kts מגדיר את שם הפרויקט, את המודולים שלו ואת המאגרים שמהם נפתרים יחסי התלות:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "MyApp"
include(":app")
include(":app-core")

ב-Lightbuild, הקובץ project.lightbuild.yaml מגדיר את אותן הגדרות:

project:
  name: MyApp
modules:
  - app
  - app-core
repositories:
  - google
  - mavenCentral

בטבלה הבאה מוצגת השוואה בין ההגדרות ברמת הפרויקט:

קונספט Kotlin DSL Lightbuild
שם הפרויקט rootProject.name project.name
מודולים include(":app") modules
מאגרים repositories ב-dependencyResolutionManagement repositories
מאגר Maven בהתאמה אישית maven { url = uri("https://maven.example.com/releases") } ‫maven עם name ו-url
פרטי הכניסה למאגר ‫credentials בבלוק maven credentials עם מפתחות שאתם מגדירים ב-local.properties
גרסת כלי ה-build גרסת Gradle ב-gradle-wrapper.properties, וגרסת AGP בבלוק plugins lightbuild.version
גרסת Kotlin מובנה ב-AGP. כדי להשתמש בגרסה חדשה יותר, צריך להוסיף את kotlin-gradle-plugin לנתיב המחלקה של buildscript. build.kotlin.version
גרסת Java kotlin { jvmToolchain(17) } build.java.version

סוג המודול והפלאגינים

ב-Kotlin DSL, בוחרים את סוג המודול על ידי החלת פלאגין, ומחילים פלאגינים אחרים כדי להוסיף תכונות כמו KSP. ב-Lightbuild, מגדירים את ה-type של המודול, ו-Lightbuild מחיל את התכונות שנדרשות להגדרה:

קונספט Kotlin DSL Lightbuild
מודול האפליקציה id("com.android.application") type: application
מודול הספרייה id("com.android.library") type: library
מודול Kotlin Multiplatform (KMP) id("org.jetbrains.kotlin.multiplatform") עדיין אינו נתמך
Kotlin מובנה ב-AGP בגרסה 9.0 ואילך מובנה
KSP id("com.google.devtools.ksp") מופעלת באופן אוטומטי כשמצהירים על kspProcessors
מאגרי אחסון לפרוטוקולים id("com.google.protobuf") com.android.tools.lightbuild.protobuf ב-optionalFeatures
קטלוגים של גרסאות קובץ אחד (libs.versions.toml) עדיין אינו נתמך
פלאגינים אחרים החלת הפלאגין של Gradle עדיין אינו נתמך

הגדרות Android

ב-Kotlin DSL, מגדירים את הגדרות Android בבלוק android של קובץ build.gradle.kts של מודול:

plugins {
    id("com.android.application")
}

android {
    namespace = "com.example.myapp.app"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"
    }
}

ב-Lightbuild, קובעים את אותן הגדרות בבלוק android של קובץ lightbuild.yaml של מודול:

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"

בטבלה הבאה מוצגת השוואה בין ההגדרות האלה:

הגדרה Kotlin DSL Lightbuild
מרחב שמות namespace namespace
‫Compile SDK compileSdk = 36 compileSdk.version.release.apiLevel: 36
גרסת SDK מינימלית minSdk = 24 ב-defaultConfig minSdk.version.release.apiLevel: 24
גרסת יעד של SDK targetSdk = 36 ב-defaultConfig targetSdk.version.release.apiLevel: 36
מזהה הבקשה applicationId ב-defaultConfig applicationId
קוד גירסה versionCode ב-defaultConfig versionCode
שם גירסה versionName ב-defaultConfig versionName
חתימה על גרסאות ‫signingConfigs ו-signingConfig בסוג ה-build‏ release packaging.release.signing

פניות קשורות

ב-Kotlin DSL, מצהירים על יחסי תלות בבלוק dependencies, באמצעות הגדרות כמו implementation:

dependencies {
    implementation(project(":app-core"))
    implementation("androidx.core:core-ktx:1.18.0")
}

ב-Lightbuild, מפרטים את יחסי התלות של המודולים בקטע module, ואת הספריות החיצוניות בקטע maven:

android:
  dependencies:
    module:
      - //app-core
    maven:
      - androidx.core:core-ktx:1.18.0

Kotlin DSL משתמש בהגדרות אחרות, כמו api,‏ compileOnly ו-runtimeOnly, כדי לקבוע איך מודול משתמש ביחסי תלות:

dependencies {
    api(project(":data"))
    compileOnly("androidx.annotation:annotation:1.9.1")
}

ב-Lightbuild, מוסיפים את ההגדרות compile ו-runtime ליחסי התלות:

android:
  dependencies:
    module:
      - //data:
          compile: public
    maven:
      - androidx.annotation:annotation:1.9.1:
          runtime: off

מידע נוסף על ההגדרות האלה מופיע במאמר הגדרות של יחסי תלות.

בטבלה הבאה מוצגת השוואה בין הצהרות נפוצות על יחסי תלות:

תלות Kotlin DSL Lightbuild
מודול בפרויקט implementation(project(":app-core")) //app-core ב-android.dependencies.module
ספרייה חיצונית implementation("group:artifact:version") group:artifact:version ב-android.dependencies.maven
תלות ב-API api("group:artifact:version") ‫group:artifact:version ב-android.dependencies.maven, עם compile: public
תלות מסוג Compile-only compileOnly("group:artifact:version") ‫group:artifact:version ב-android.dependencies.maven, עם runtime: off
תלות בזמן ריצה בלבד runtimeOnly("group:artifact:version") ‫group:artifact:version ב-android.dependencies.maven, עם compile: off
מעבד KSP ksp("group:artifact:version") group:artifact:version ב-android.kspProcessors.maven
תלות בבדיקה מקומית testImplementation("group:artifact:version") group:artifact:version ב-android.tests.test.dependencies.maven
תלות בבדיקת אינסטרומנטציה androidTestImplementation("group:artifact:version") group:artifact:version ב-android.tests.androidTest.dependencies.maven

KSP

ב-Kotlin DSL, מחילים את הפלאגין של KSP ומוסיפים מעבדים באמצעות ההגדרה ksp:

plugins {
    id("com.android.library")
    id("com.google.devtools.ksp")
}

dependencies {
    implementation("com.squareup.moshi:moshi:1.15.2")
    implementation("com.squareup.moshi:moshi-kotlin:1.15.2")
    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.2")
}

ב-Lightbuild, מוסיפים מעבדים לבלוק kspProcessors, ו-Lightbuild מחיל את הפלאגין של KSP באופן אוטומטי:

type: library
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

בדיקות

ב-Kotlin DSL, מגדירים את כלי ההרצה של בדיקות האינסטרומנטציה ב-defaultConfig, ומוסיפים יחסי תלות של בדיקות באמצעות ההגדרות האישיות של testImplementation ו-androidTestImplementation:

android {
    defaultConfig {
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.3.0")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
}

ב-Lightbuild, מגדירים בדיקות מקומיות ב-tests.test ובדיקות אינסטרומנטציה ב-tests.androidTest:

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

פקודות build

ב-Kotlin DSL, אתם יוצרים ובודקים משורת הפקודה על ידי הפעלת משימות Gradle באמצעות Gradle wrapper. ב-Lightbuild משתמשים ב-Lightbuild CLI.

משימה Gradle wrapper Lightbuild CLI
בניית מודול האפליקציה ./gradlew :app:assembleDebug lightbuild build app
בניית כל היעדים ./gradlew assemble lightbuild build
הרצת בדיקות מקומיות של מודול ./gradlew :app-core:test lightbuild test app-core:hostTest
הרצת בדיקות אינסטרומנטציה של מודול ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
הרצת כל הבדיקות ./gradlew test connectedAndroidTest lightbuild test
הסרת פלט ה-build והמטמונים ./gradlew clean lightbuild clean

מידע נוסף זמין במאמרים פיתוח האפליקציה משורת הפקודה ופיתוח פרויקטים של Lightbuild משורת הפקודה.

נעילת תלויות

ב-Kotlin DSL, נעילת יחסי תלות היא אופציונלית: מפעילים אותה בסקריפטים של ה-build, ואז כותבים קובצי נעילה על ידי הפעלת build עם הדגל --write-locks. ב-Lightbuild, לכל מודול יש קובץ resolved.deps שמתעד את יחסי התלות שנפתרו במודול, ו-Lightbuild יוצר אותו באופן אוטומטי. כמו בקובצי הנעילה של Gradle, צריך להוסיף את קובצי ה-resolved.deps לניהול הגרסאות.

כדי לנעול את יחסי התלות, למשל ב-build של CI, מוסיפים את הדגל --locked-dependencies ל-lightbuild resolve או ל-lightbuild test. עם הדגל הזה, הפקודה נכשלת אם קובץ resolved.deps לא תואם ליחסי התלות של המודול, במקום לעדכן את הקובץ:

lightbuild resolve --locked-dependencies

תכונות שאינן נתמכות

‫Lightbuild לא תומך בתכונות הבאות של Kotlin DSL:

  • קטלוגים של גרסאות ויישומי פלאגין של מוסכמות
  • פלאגינים בהתאמה אישית
  • גרסאות המוצרים. במקום זאת, צרו מודול אפליקציה נפרד לכל גרסה של האפליקציה. מידע נוסף זמין בקטע מודולים מרובים של אפליקציות.
  • מודולים של Kotlin Multiplatform‏ (KMP)
  • פתרון תלות באמצעות שרת proxy

בנוסף, אי אפשר לשלב בפרויקט מודולים של Kotlin DSL ו-Lightbuild. בעיות מוכרות מפורטות בנתוני הגרסה של Lightbuild.