مقایسه Lightbuild با Kotlin DSL

اگر با پیکربندی ساخت‌های Android با Kotlin DSL آشنا هستید، این صفحه نشان می‌دهد که پیکربندی‌های رایج Kotlin DSL چگونه به Lightbuild نگاشت می‌شوند.

نمونه‌های این صفحه از Kotlin DSL و افزونه Android Gradle‏ (AGP) نسخه ۹.۰ یا بالاتر استفاده می‌کنند که شامل پشتیبانی داخلی Kotlin است.

ساختن فایل‌ها

جدول زیر معادل Lightbuild هر فایل ساخت Kotlin DSL را نشان می‌دهد:

Kotlin DSL Lightbuild هدف
settings.gradle.kts project.lightbuild.yaml نام پروژه، واحدها، و مخزن‌ها
ریشه build.gradle.kts و gradle-wrapper.properties project.lightbuild.yaml نسخه‌های زنجیره ابزار و ابزار ساخت
واحد 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 تعریف می‌کنید
نسخه ابزار ساخت نسخه Gradle در gradle-wrapper.properties، و نسخه AGP در بلوک plugins lightbuild.version
نسخه Kotlin در AGP تعبیه شده است. برای استفاده از نسخه جدیدتر، kotlin-gradle-plugin را به مسیر کلاس buildscript اضافه کنید. build.kotlin.version
نسخه جاوا 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") هنوز پشتیبانی نمی‌شود
کاتلین در AGP نسخه ۹.۰ و بالاتر تعبیه شده است ساخته‌شده در
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
کیت توسعه نرم‌افزار کامپایل compileSdk = 36 compileSdk.version.release.apiLevel: 36
حداقل کیت توسعه نرم‌افزار 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 در نوع ساخت 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("group:artifact:version") ‫group:artifact:version در android.dependencies.maven، با compile: public
وابستگی فقط کامپایل 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

فرمان‌های ساخت

با Kotlin DSL، با اجرای تکالیف Gradle با پوشاننده Gradle، از خط فرمان می‌سازید و آزمایش می‌کنید. با Lightbuild، از Lightbuild CLI استفاده می‌کنید.

تکلیف بسته‌بندی‌کننده Gradle 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
برداشتن خروجی ساخت و حافظه‌های پنهان ./gradlew clean lightbuild clean

برای اطلاعات بیشتر، ساختن برنامه از خط فرمان و ساختن پروژه‌های Lightbuild از خط فرمان را ببینید.

قفل کردن وابستگی

با Kotlin DSL، قفل کردن وابستگی اختیاری است: آن را در متن‌های ساخت روشن می‌کنید و سپس با اجرای ساخت با پرچم --write-locks، فایل‌های قفل را می‌نویسید. در Lightbuild، هر پیمانه یک فایل resolved.deps دارد که وابستگی‌های حل‌شده پیمانه را ثبت می‌کند، که Lightbuild به‌طور خودکار تولید می‌کند. همانند فایل‌های قفل Gradle، فایل‌های resolved.deps را در کنترل نسخه بررسی کنید.

برای قفل کردن وابستگی‌هایتان، مثلاً در ساخت CI، پرچم --locked-dependencies را به lightbuild resolve یا lightbuild test اضافه کنید. با این پرچم، اگر فایل resolved.deps با وابستگی‌های واحد مطابقت نداشته باشد، فرمان به‌جای به‌روزرسانی فایل، ناموفق می‌شود:

lightbuild resolve --locked-dependencies

ویژگی‌های پشتیبانی‌نشده

Lightbuild از ویژگی‌های Kotlin DSL زیر پشتیبانی نمی‌کند:

  • کاتالوگ‌های نسخه و افزایه‌های قراردادی
  • افزایه‌های سفارشی
  • نسخه‌های ویژه محصول. درعوض، برای هر نسخه از برنامه‌تان، یک واحد برنامه جداگانه ایجاد کنید. برای اطلاعات بیشتر، واحدهای برنامه چندگانه را ببینید.
  • پیمانه‌های Kotlin Multiplatform (KMP)
  • حل وابستگی ازطریق پراکسی سرور

علاوه‌براین، یک پروژه نمی‌تواند Kotlin DSL و Lightbuild را باهم ترکیب کند. برای مشکلات شناخته‌شده، یادداشت‌های انتشار Lightbuild را ببینید.