Lightbuild और Kotlin DSL की तुलना करना

अगर आपको Kotlin DSL की मदद से Android बिल्ड कॉन्फ़िगर करने के बारे में पता है, तो इस पेज पर बताया गया है कि Kotlin DSL के सामान्य कॉन्फ़िगरेशन, Lightbuild पर कैसे मैप होते हैं.

इस पेज पर दिए गए उदाहरणों में, Kotlin डीएसएल और Android Gradle प्लगिन (एजीपी) 9.0 या इसके बाद के वर्शन का इस्तेमाल किया गया है. इसमें Kotlin के लिए पहले से मौजूद सहायता शामिल है.

बिल्ड फ़ाइलें

यहां दी गई टेबल में, हर Kotlin DSL बिल्ड फ़ाइल के लिए Lightbuild का विकल्प दिखाया गया है:

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
डेटा स्टोर करने की जगह dependencyResolutionManagement में repositories repositories
कस्टम Maven रिपॉज़िटरी maven { url = uri("https://maven.example.com/releases") } maven का पेमेंट name से किया गया और url के पेमेंट के लिए का इस्तेमाल किया गया
रिपॉज़िटरी के क्रेडेंशियल maven ब्लॉक में credentials credentials, जिसमें local.properties में तय की गई कुंजियां शामिल हैं
बिल्ड टूल का वर्शन gradle-wrapper.properties में Gradle वर्शन और plugins ब्लॉक में एजीपी वर्शन lightbuild.version
Kotlin वर्शन एजीपी में पहले से मौजूद है. नए वर्शन का इस्तेमाल करने के लिए, kotlin-gradle-plugin को buildscript क्लासपाथ में जोड़ें. build.kotlin.version
Java वर्शन kotlin { jvmToolchain(17) } build.java.version

मॉड्यूल टाइप और प्लगिन

Kotlin DSL में, प्लगिन लागू करके मॉड्यूल का टाइप चुना जाता है. साथ ही, केएसपी जैसी सुविधाएं जोड़ने के लिए, अन्य प्लगिन लागू किए जाते हैं. Lightbuild में, मॉड्यूल का type सेट किया जाता है. इसके बाद, Lightbuild आपके कॉन्फ़िगरेशन के लिए ज़रूरी सुविधाएं लागू करता है:

कॉन्सेप्ट Kotlin DSL Lightbuild
ऐप्लिकेशन मॉड्यूल id("com.android.application") type: application
लाइब्रेरी मॉड्यूल id("com.android.library") type: library
Kotlin Multiplatform (केएमपी) मॉड्यूल id("org.jetbrains.kotlin.multiplatform") अभी तक समर्थित नहीं है
Kotlin AGP 9.0 और इसके बाद के वर्शन में पहले से मौजूद है निर्माण का वर्ष
केएसपी id("com.google.devtools.ksp") kspProcessors की जानकारी देने पर, यह अपने-आप लागू हो जाता है
प्रोटोकॉल बफ़र id("com.google.protobuf") optionalFeatures में com.android.tools.lightbuild.protobuf
वर्शन कैटलॉग libs.versions.toml फ़ाइल अभी तक समर्थित नहीं है
अन्य प्लगिन Gradle प्लगिन लागू करना अभी तक समर्थित नहीं है

Android सेटिंग

Kotlin DSL में, मॉड्यूल की build.gradle.kts फ़ाइल के android ब्लॉक में Android सेटिंग कॉन्फ़िगर की जाती हैं:

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 में, किसी मॉड्यूल की lightbuild.yaml फ़ाइल के android ब्लॉक में वही सेटिंग कॉन्फ़िगर की जाती हैं:

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
कम से कम एसडीके defaultConfig में minSdk = 24 minSdk.version.release.apiLevel: 24
टारगेट किए जा रहे SDK टूल defaultConfig में targetSdk = 36 targetSdk.version.release.apiLevel: 36
ऐप्लिकेशन आईडी defaultConfig में applicationId applicationId
वर्शन का कोड defaultConfig में versionCode versionCode
वर्शन का नाम defaultConfig में versionName 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")) android.dependencies.module में //app-core
एक्सटर्नल लाइब्रेरी implementation("group:artifact:version") android.dependencies.maven में group:artifact:version
एपीआई पर निर्भरता api("group:artifact:version") android.dependencies.maven में group:artifact:version, compile: public के साथ
कंपाइल-ओनली डिपेंडेंसी compileOnly("group:artifact:version") android.dependencies.maven में group:artifact:version, runtime: off के साथ
रनटाइम-ओनली डिपेंडेंसी runtimeOnly("group:artifact:version") android.dependencies.maven में group:artifact:version, compile: off के साथ
केएसपी प्रोसेसर ksp("group:artifact:version") android.kspProcessors.maven में group:artifact:version
लोकल टेस्ट डिपेंडेंसी testImplementation("group:artifact:version") android.tests.test.dependencies.maven में group:artifact:version
इंस्ट्रुमेंटेड टेस्ट डिपेंडेंसी androidTestImplementation("group:artifact:version") android.tests.androidTest.dependencies.maven में group:artifact:version

केएसपी

Kotlin DSL में, केएसपी प्लग इन लागू करें और 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 केएसपी प्लगिन को अपने-आप लागू कर देता है:

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 सीएलआई का इस्तेमाल किया जाता है.

टास्क 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 फ़्लैग के साथ बिल्ड चलाकर lockfiles लिखें. Lightbuild में, हर मॉड्यूल में एक resolved.deps फ़ाइल होती है. इसमें मॉड्यूल की रिज़ॉल्व की गई डिपेंडेंसी रिकॉर्ड होती हैं. Lightbuild, इस फ़ाइल को अपने-आप जनरेट करता है. Gradle लॉकफ़ाइलों की तरह, वर्शन कंट्रोल के लिए अपनी resolved.deps फ़ाइलों को चेक इन करें.

अपनी डिपेंडेंसी लॉक करने के लिए, उदाहरण के लिए, सीआई बिल्ड में, lightbuild resolve या lightbuild test में --locked-dependencies फ़्लैग जोड़ें. इस फ़्लैग का इस्तेमाल करने पर, अगर कोई resolved.deps फ़ाइल, मॉड्यूल की डिपेंडेंसी से मेल नहीं खाती है, तो फ़ाइल को अपडेट करने के बजाय कमांड काम नहीं करता:

lightbuild resolve --locked-dependencies

ये सुविधाएं, Google Play Books के साथ काम नहीं करतीं

Lightbuild में Kotlin DSL की ये सुविधाएं काम नहीं करतीं:

  • वर्शन कैटलॉग और कन्वेंशन प्लगिन
  • कस्टम प्लग इन
  • प्रॉडक्ट के फ़्लेवर. इसके बजाय, अपने ऐप्लिकेशन के हर वर्शन के लिए एक अलग ऐप्लिकेशन मॉड्यूल बनाएं. ज़्यादा जानकारी के लिए, एक से ज़्यादा ऐप्लिकेशन मॉड्यूल लेख पढ़ें.
  • Kotlin Multiplatform (KMP) मॉड्यूल
  • प्रॉक्सी सर्वर के ज़रिए डिपेंडेंसी रिज़ॉल्यूशन

इसके अलावा, किसी प्रोजेक्ट में Kotlin DSL और Lightbuild मॉड्यूल को मिक्स नहीं किया जा सकता. पहले से मौजूद समस्याओं के बारे में जानने के लिए, Lightbuild के रिलीज़ नोट देखें.