Kotlin DSL-এর সাথে Lightbuild-এর তুলনা করা

Kotlin DSL-এর মাধ্যমে Android বিল্ড কনফিগার করার ব্যাপারে আপনি পরিচিত হলে, এই পৃষ্ঠা দেখায় যে কীভাবে সাধারণ Kotlin DSL কনফিগারেশন Lightbuild-এ ম্যাপ করে।

এই পৃষ্ঠার উদাহরণগুলি Kotlin DSL এবং Android Gradle প্লাগ-ইন (AGP) 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") } name দিয়ে maven এবং url
রিপোজিটরি ক্রেডেনশিয়াল maven ব্লকে credentials local.properties-এ আপনার উল্লেখ করা কী সহ credentials
বিল্ড টুল ভার্সন gradle-wrapper.properties-এ Gradle ভার্সন এবং plugins ব্লকে AGP ভার্সন lightbuild.version
Kotlin ভার্সন AGP-তে বিল্ট-ইন। নতুন ভার্সন ব্যবহার করতে, buildscript ক্লাসপাথে kotlin-gradle-plugin যোগ করুন। 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") 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
ন্যূনতম SDK 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 ডিপেন্ডেন্সি 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 প্রসেসর 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

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 বিল্ডে, lightbuild resolve বা lightbuild test-এ --locked-dependencies ফ্ল্যাগ যোগ করুন। এই ফ্ল্যাগ ব্যবহার করলে, resolved.deps ফাইল মডিউলের ডিপেন্ডেন্সির সাথে ম্যাচ না করলে, ফাইল আপডেট করার পরিবর্তে কমান্ড কাজ করে না:

lightbuild resolve --locked-dependencies

কাজ করে না এমন ফিচার

Lightbuild-এ নিম্নলিখিত Kotlin DSL ফিচার কাজ করে না:

  • ভার্সন ক্যাটালগ ও কনভেনশন প্লাগ-ইন
  • কাস্টম প্লাগ-ইন
  • প্রোডাক্টের ফ্লেভার। পরিবর্তে, আপনার অ্যাপের প্রতিটি ভার্সনের জন্য আলাদা অ্যাপ মডিউল তৈরি করুন। আরও তথ্যের জন্য, একাধিক অ্যাপ মডিউল দেখুন।
  • Kotlin Multiplatform (KMP) মডিউল
  • প্রক্সি সার্ভারের মাধ্যমে ডিপেন্ডেন্সি রেজোলিউশন

এছাড়াও, কোনও প্রোজেক্টে Kotlin DSL এবং Lightbuild মডিউল একসাথে ব্যবহার করা যাবে না। পরিচিত সমস্যার জন্য, Lightbuild রিলিজ নোট দেখুন।