مقارنة Lightbuild مع Kotlin DSL

إذا كنت على دراية بإعداد إصدارات Android باستخدام Kotlin DSL، توضّح هذه الصفحة كيفية ربط إعدادات Kotlin DSL الشائعة بـ Lightbuild.

تستخدم الأمثلة الواردة في هذه الصفحة لغة Kotlin DSL والإصدار 9.0 أو إصدار أحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android (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
إصدار 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 مضمّنة في الإصدار 9.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث مدمجة
عامل ترويجي رئيسي (KSP) id("com.google.devtools.ksp") يتم تطبيقها تلقائيًا عند الإفصاح عن kspProcessors
Protocol Buffers 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
حزمة تطوير البرامج (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 في نوع الإصدار 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
تبعية 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

أوامر الإنشاء

باستخدام Kotlin DSL، يمكنك إنشاء الإصدارات واختبارها من سطر الأوامر من خلال تشغيل مهام Gradle باستخدام أداة Gradle Wrapper. باستخدام 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.