আপনার বিল্ড কনফিগারেশন Groovy থেকে Kotlin-এ স্থানান্তর করুন

Android Gradle প্লাগইন 4.0 আপনার Gradle বিল্ড কনফিগারেশনে Kotlin ব্যবহার করার জন্য Groovy-এর প্রতিস্থাপনের জন্য সমর্থন যোগ করেছে, যা ঐতিহ্যগতভাবে Gradle কনফিগারেশন ফাইলগুলিতে ব্যবহৃত প্রোগ্রামিং ভাষা।

গ্রেডল স্ক্রিপ্ট লেখার জন্য কোটলিনকে গ্রোভির চেয়ে পছন্দ করা হয় কারণ কোটলিন আরও পঠনযোগ্য এবং ভাল কম্পাইল-টাইম চেকিং এবং IDE সমর্থন প্রদান করে।

যদিও Kotlin বর্তমানে Groovy-এর তুলনায় অ্যান্ড্রয়েড স্টুডিওর কোড এডিটরে আরও ভাল ইন্টিগ্রেশন অফার করে, Kotlin ব্যবহার করে বিল্ডগুলি Groovy ব্যবহার করে বিল্ডগুলির তুলনায় ধীর হতে থাকে, তাই মাইগ্রেট করার সিদ্ধান্ত নেওয়ার সময় বিল্ড পারফরম্যান্স বিবেচনা করুন।

এই পৃষ্ঠাটি আপনার Android অ্যাপের Gradle বিল্ড ফাইলগুলিকে Groovy থেকে Kotlin-এ রূপান্তর করার বিষয়ে প্রাথমিক তথ্য প্রদান করে। আরও ব্যাপক মাইগ্রেশন গাইডের জন্য, Gradle-এর অফিসিয়াল ডকুমেন্টেশন দেখুন।

টাইমলাইন

অ্যান্ড্রয়েড স্টুডিও জিরাফ থেকে শুরু করে, নতুন প্রকল্পগুলি বিল্ড কনফিগারেশনের জন্য ডিফল্টরূপে Kotlin DSL ( build.gradle.kts ) ব্যবহার করে৷ এটি সিনট্যাক্স হাইলাইটিং, কোড সমাপ্তি, এবং ঘোষণায় নেভিগেশন সহ Groovy DSL ( build.gradle ) এর থেকে একটি ভাল সম্পাদনার অভিজ্ঞতা প্রদান করে। আরও জানতে, গ্রেডল কোটলিন ডিএসএল প্রাইমার দেখুন।

সাধারণ পদ

কোটলিন ডিএসএল: প্রাথমিকভাবে অ্যান্ড্রয়েড গ্রেডল প্লাগইন কোটলিন ডিএসএল বা মাঝে মাঝে অন্তর্নিহিত গ্রেডল কোটলিন ডিএসএল- কে বোঝায়।

এই মাইগ্রেশন গাইডে, "কোটলিন" এবং "কোটলিন ডিএসএল" একে অপরের সাথে ব্যবহার করা হয়েছে। একইভাবে, "Groovy" এবং "Groovy DSL" বিনিময়যোগ্যভাবে ব্যবহৃত হয়।

স্ক্রিপ্ট ফাইলের নামকরণ

স্ক্রিপ্ট ফাইল এক্সটেনশনের নামগুলি বিল্ড ফাইলটি যে ভাষায় লেখা হয়েছে তার উপর ভিত্তি করে:

  • গ্রোভিতে লেখা Gradle বিল্ড ফাইল .gradle ফাইলের নাম এক্সটেনশন ব্যবহার করে।
  • Kotlin এ লেখা Gradle বিল্ড ফাইল .gradle.kts ফাইলের নাম এক্সটেনশন ব্যবহার করে।

সিনট্যাক্স রূপান্তর করুন

গ্রুভি এবং কোটলিনের মধ্যে সিনট্যাক্সে কিছু সাধারণ পার্থক্য রয়েছে, তাই আপনাকে আপনার বিল্ড স্ক্রিপ্ট জুড়ে এই পরিবর্তনগুলি প্রয়োগ করতে হবে।

মেথড কলে বন্ধনী যুক্ত করুন

Groovy আপনাকে মেথড কলে বন্ধনী বাদ দিতে দেয়, যখন Kotlin এর প্রয়োজন হয়। আপনার কনফিগারেশন স্থানান্তর করতে, এই ধরণের পদ্ধতি কলগুলিতে বন্ধনী যুক্ত করুন। এই কোডটি দেখায় কিভাবে গ্রোভিতে একটি সেটিং কনফিগার করতে হয়:

compileSdkVersion 30

এটি কোটলিনে লেখা একই কোড:

compileSdkVersion(30)

অ্যাসাইনমেন্ট কলে = যোগ করুন

গ্রোভি ডিএসএল আপনাকে অ্যাসাইনমেন্ট অপারেটর = বৈশিষ্ট্যগুলি বরাদ্দ করার সময় বাদ দিতে দেয়, যেখানে কোটলিনের এটি প্রয়োজন। এই কোডটি দেখায় কিভাবে গ্রুভিতে বৈশিষ্ট্য বরাদ্দ করতে হয়:

java {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
}

এই কোডটি দেখায় কিভাবে কোটলিনে বৈশিষ্ট্য বরাদ্দ করতে হয়:

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

স্ট্রিং রূপান্তর

এখানে গ্রোভি এবং কোটলিনের মধ্যে স্ট্রিং পার্থক্য রয়েছে:

  • স্ট্রিংগুলির জন্য দ্বৈত উদ্ধৃতি: যখন গ্রোভি একক উদ্ধৃতি ব্যবহার করে স্ট্রিংগুলিকে সংজ্ঞায়িত করার অনুমতি দেয়, কোটলিনের ডবল উদ্ধৃতি প্রয়োজন৷
  • ডটেড এক্সপ্রেশনে স্ট্রিং ইন্টারপোলেশন: গ্রোভিতে, আপনি ডটেড এক্সপ্রেশনে স্ট্রিং ইন্টারপোলেশনের জন্য শুধুমাত্র $ উপসর্গ ব্যবহার করতে পারেন, কিন্তু কোটলিনের প্রয়োজন হয় যে আপনি ডটেড এক্সপ্রেশনগুলি কোঁকড়া ধনুর্বন্ধনী দিয়ে মোড়ানো। উদাহরণস্বরূপ, Groovy তে আপনি $project.rootDir ব্যবহার করতে পারেন যেমনটি নিচের স্নিপেটে দেখানো হয়েছে:

        myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"
        

    কোটলিনে, তবে, পূর্ববর্তী কোডটি project toString() কল করে, project.rootDir এ নয়। রুট ডিরেক্টরির মান পেতে, ${project.rootDir} এক্সপ্রেশনটি কোঁকড়া ধনুর্বন্ধনী দিয়ে মুড়ে দিন:

        myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
        

    আরও জানতে, কোটলিন ডকুমেন্টেশনে স্ট্রিং টেমপ্লেটগুলি দেখুন৷

ফাইল এক্সটেনশনের নাম পরিবর্তন করুন

প্রতিটি বিল্ড ফাইলে .kts যোগ করুন যখন আপনি এর বিষয়বস্তু স্থানান্তর করবেন। উদাহরণস্বরূপ, একটি বিল্ড ফাইল নির্বাচন করুন, যেমন settings.gradle ফাইল। ফাইলটির নাম পরিবর্তন করে settings.gradle.kts করুন এবং ফাইলের বিষয়বস্তু Kotlin-এ রূপান্তর করুন। নিশ্চিত করুন যে আপনার প্রকল্পটি প্রতিটি বিল্ড ফাইলের স্থানান্তরের পরেও কম্পাইল করে।

প্রথমে আপনার ক্ষুদ্রতম ফাইলগুলি স্থানান্তর করুন, অভিজ্ঞতা অর্জন করুন এবং তারপরে এগিয়ে যান৷ আপনি একটি প্রকল্পে Kotlin এবং Groovy বিল্ড ফাইলের মিশ্রণ থাকতে পারেন, তাই সাবধানে পদক্ষেপ নিতে আপনার সময় নিন।

val বা var দিয়ে def প্রতিস্থাপন করুন

val বা var দিয়ে def প্রতিস্থাপন করুন, যেভাবে আপনি Kotlin-এ ভেরিয়েবলকে সংজ্ঞায়িত করেন । এটি গ্রোভিতে একটি পরিবর্তনশীল ঘোষণা:

def building64Bit = false

এটি কোটলিনে লেখা একই কোড:

val building64Bit = false

is সাথে বুলিয়ান বৈশিষ্ট্যের উপসর্গ

Groovy সম্পত্তির নামের উপর ভিত্তি করে সম্পত্তি কর্তন যুক্তি ব্যবহার করে। একটি বুলিয়ান প্রপার্টি foo এর জন্য, এর ডিডিউড পদ্ধতি হতে পারে getFoo , setFoo বা isFoo । এইভাবে একবার কোটলিনে রূপান্তরিত হলে, আপনাকে সম্পত্তির নামগুলিকে ডিডিউড পদ্ধতিতে পরিবর্তন করতে হবে যা কোটলিন দ্বারা সমর্থিত নয়। উদাহরণস্বরূপ, buildTypes ডিএসএল বুলিয়ান উপাদানগুলির জন্য, আপনাকে তাদের উপসর্গ করতে হবে is সাথে। এই কোডটি দেখায় কিভাবে গ্রুভিতে বুলিয়ান বৈশিষ্ট্য সেট করতে হয়:

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            ...
        }
        debug {
            debuggable true
            ...
        }
    ...

নিম্নলিখিত কোটলিনে একই কোড। উল্লেখ্য যে বৈশিষ্ট্যগুলি is দ্বারা উপসর্গযুক্ত।

android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true
            ...
        }
        getByName("debug") {
            isDebuggable = true
            ...
        }
    ...

তালিকা এবং মানচিত্র রূপান্তর

Groovy এবং Kotlin-এ তালিকা এবং মানচিত্র বিভিন্ন সিনট্যাক্স ব্যবহার করে সংজ্ঞায়িত করা হয়। গ্রুভি [] ব্যবহার করে, যখন কোটলিন listOf বা mapOf ব্যবহার করে সংগ্রহ তৈরির পদ্ধতিকে স্পষ্টভাবে কল করে। স্থানান্তর করার সময় listOf বা mapOf দিয়ে [] প্রতিস্থাপন করা নিশ্চিত করুন।

গ্রুভি বনাম কোটলিনের মধ্যে একটি তালিকা কীভাবে সংজ্ঞায়িত করবেন তা এখানে:

jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]

এটি কোটলিনে লেখা একই কোড:

jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")

গ্রোভি বনাম কোটলিনের একটি মানচিত্র কীভাবে সংজ্ঞায়িত করবেন তা এখানে:

def myMap = [key1: 'value1', key2: 'value2']

এটি কোটলিনে লেখা একই কোড:

val myMap = mapOf("key1" to "value1", "key2" to "value2")

বিল্ড প্রকারগুলি কনফিগার করুন

কোটলিন ডিএসএল-এ শুধুমাত্র ডিবাগ এবং রিলিজ বিল্ড প্রকারগুলি অন্তর্নিহিতভাবে উপলব্ধ। অন্য সব কাস্টম বিল্ড প্রকার ম্যানুয়ালি তৈরি করতে হবে।

গ্রুভিতে আপনি প্রথমে তৈরি না করেই ডিবাগ, রিলিজ এবং কিছু অন্যান্য বিল্ড প্রকার ব্যবহার করতে পারেন। নিচের কোড স্নিপেটটি গ্রোভিতে debug , release এবং benchmark বিল্ড প্রকারের সাথে একটি কনফিগারেশন দেখায়।

buildTypes {
 debug {
   ...
 }
 release {
   ...
 }
 benchmark {
   ...
 }
}

Kotlin-এ সমতুল্য কনফিগারেশন তৈরি করতে, আপনাকে অবশ্যই স্পষ্টভাবে benchmark বিল্ড টাইপ তৈরি করতে হবে।

buildTypes {
 debug {
   ...
 }

 release {
   ...
 }
 register("benchmark") {
    ...
 }
}

বিল্ডস্ক্রিপ্ট থেকে প্লাগইন ব্লকে স্থানান্তর করুন

যদি আপনার বিল্ডটি প্রজেক্টে প্লাগইন যোগ করার জন্য buildscript {} ব্লক ব্যবহার করে, তাহলে আপনার পরিবর্তে plugins {} ব্লক ব্যবহার করার জন্য রিফ্যাক্টর করা উচিত। plugins {} ব্লক প্লাগইনগুলি প্রয়োগ করা সহজ করে তোলে এবং এটি সংস্করণ ক্যাটালগগুলির সাথে ভাল কাজ করে৷

উপরন্তু, আপনি যখন আপনার বিল্ড ফাইলগুলিতে plugins {} ব্লক ব্যবহার করেন, তখন বিল্ড ব্যর্থ হলেও Android স্টুডিও প্রসঙ্গ সম্পর্কে সচেতন থাকে। এই প্রসঙ্গটি আপনার Kotlin DSL ফাইলগুলির সমাধান করতে সাহায্য করে কারণ এটি স্টুডিও IDE-কে কোড সমাপ্তি সম্পাদন করতে এবং অন্যান্য সহায়ক পরামর্শ প্রদান করতে দেয়৷

প্লাগইন আইডি খুঁজুন

যদিও buildscript {} ব্লক প্লাগইনের Maven স্থানাঙ্ক ব্যবহার করে বিল্ড ক্লাসপাথে প্লাগইন যোগ করে, উদাহরণস্বরূপ com.android.tools.build:gradle:7.4.0 , plugins {} ব্লক পরিবর্তে প্লাগইন আইডি ব্যবহার করে।

বেশিরভাগ প্লাগইনগুলির জন্য, প্লাগইন আইডি হল সেই স্ট্রিংটি যখন আপনি apply plugin ব্যবহার করে প্রয়োগ করেন। উদাহরণস্বরূপ, নিম্নলিখিত প্লাগইন আইডিগুলি অ্যান্ড্রয়েড গ্রেডল প্লাগইনের অংশ:

  • com.android.application
  • com.android.library
  • com.android.lint
  • com.android.test

আপনি Google Maven সংগ্রহস্থলে সম্পূর্ণ প্লাগইন তালিকা খুঁজে পেতে পারেন।

কোটলিন প্লাগইনগুলি একাধিক প্লাগইন আইডি দ্বারা উল্লেখ করা যেতে পারে। আমরা নিচের টেবিলের মাধ্যমে নামস্থানযুক্ত প্লাগইন আইডি এবং সংক্ষিপ্ত থেকে নামস্থানযুক্ত প্লাগইন আইডিতে রিফ্যাক্টর ব্যবহার করার পরামর্শ দিই:

শর্টহ্যান্ড প্লাগইন আইডি নামস্থানযুক্ত প্লাগইন আইডি
kotlin org.jetbrains.kotlin.jvm
kotlin-android org.jetbrains.kotlin.android
kotlin-kapt org.jetbrains.kotlin.kapt
kotlin-parcelize org.jetbrains.kotlin.plugin.parcelize

এছাড়াও আপনি গ্রেডল প্লাগইন পোর্টাল , ম্যাভেন সেন্ট্রাল রিপোজিটরি এবং গুগল ম্যাভেন রিপোজিটরিতে প্লাগইন অনুসন্ধান করতে পারেন। প্লাগইন আইডি কীভাবে কাজ করে সে সম্পর্কে আরও জানতে কাস্টম গ্রেডল প্লাগইন ডেভেলপিং পড়ুন।

রিফ্যাক্টরিং সঞ্চালন

একবার আপনি যে প্লাগইনগুলি ব্যবহার করেন তার আইডি জানার পরে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. আপনার যদি এখনও buildscript {} ব্লকে ঘোষিত প্লাগইনগুলির জন্য সংগ্রহস্থল থেকে থাকে, তাহলে সেটিকে settings.gradle ফাইলে নিয়ে যান।

  2. শীর্ষ-স্তরের build.gradle ফাইলের প্লাগইন plugins {} ব্লকে প্লাগইন যোগ করুন। আপনাকে এখানে প্লাগইনটির আইডি এবং সংস্করণ উল্লেখ করতে হবে। যদি প্লাগইনটি রুট প্রকল্পে প্রয়োগ করার প্রয়োজন না হয়, apply false ব্যবহার করুন।

  3. শীর্ষ-স্তরের build.gradle.kts ফাইল থেকে classpath এন্ট্রিগুলি সরান।

  4. মডিউল-স্তরের build.gradle ফাইলের plugins {} ব্লকে যোগ করে প্লাগইনগুলি প্রয়োগ করুন। আপনাকে এখানে শুধুমাত্র প্লাগইনের আইডি উল্লেখ করতে হবে কারণ সংস্করণটি রুট প্রজেক্ট থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।

  5. মডিউল-স্তরের build.gradle ফাইল থেকে প্লাগইনটির জন্য apply plugin কলটি সরান।

উদাহরণস্বরূপ, এই সেটআপটি buildscript {} ব্লক ব্যবহার করে:

// Top-level build.gradle file
buildscript {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:7.4.0")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0")
        ...
    }
}

// Module-level build.gradle file
apply(plugin: "com.android.application")
apply(plugin: "kotlin-android")

এটি plugins {} ব্লক ব্যবহার করে একটি সমতুল্য সেটআপ:

// Top-level build.gradle file
plugins {
   id 'com.android.application' version '7.4.0' apply false
   id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
   ...
}

// Module-level build.gradle file
plugins {
   id 'com.android.application'
   id 'org.jetbrains.kotlin.android'
   ...
}

// settings.gradle
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

প্লাগইন ব্লক রূপান্তর

plugins {} ব্লক থেকে প্লাগইন প্রয়োগ করা গ্রোভি এবং কোটলিনে একই রকম। আপনি যখন সংস্করণ ক্যাটালগ ব্যবহার করছেন তখন গ্রোভিতে কীভাবে প্লাগইনগুলি প্রয়োগ করতে হয় তা নিম্নলিখিত কোডটি দেখায়:

// Top-level build.gradle file
plugins {
   alias libs.plugins.android.application apply false
   ...
}

// Module-level build.gradle file
plugins {
   alias libs.plugins.android.application
   ...
}

নিম্নলিখিত কোড দেখায় কিভাবে কোটলিনে একই কাজ করতে হয়:

// Top-level build.gradle.kts file
plugins {
   alias(libs.plugins.android.application) apply false
   ...
}

// Module-level build.gradle.kts file
plugins {
   alias(libs.plugins.android.application)
   ...
}

আপনি যখন সংস্করণ ক্যাটালগ ব্যবহার করছেন না তখন গ্রোভিতে কীভাবে প্লাগইনগুলি প্রয়োগ করতে হয় তা নিম্নলিখিত কোডটি দেখায়:

// Top-level build.gradle file
plugins {
   id 'com.android.application' version '7.3.0' apply false
   ...
}

// Module-level build.gradle file
plugins {
   id 'com.android.application'
   ...
}

নিম্নলিখিত কোড দেখায় কিভাবে কোটলিনে একই কাজ করতে হয়:

// Top-level build.gradle.kts file
plugins {
   id("com.android.application") version "7.3.0" apply false
   ...
}

// Module-level build.gradle.kts file
plugins {
   id("com.android.application")
   ...
}

plugins {} ব্লক সম্পর্কে আরো বিস্তারিত জানার জন্য, গ্রেডল ডকুমেন্টেশনে প্লাগইন প্রয়োগ করা দেখুন।

বিবিধ

অন্যান্য কার্যকারিতার জন্য কোটলিন কোড নমুনার জন্য, নিম্নলিখিত ডকুমেন্টেশন পৃষ্ঠাগুলি দেখুন:

পরিচিত সমস্যা

বর্তমানে, একটি পরিচিত সমস্যা হল যে বিল্ডের গতি গ্রোভির তুলনায় কোটলিনের সাথে ধীর হতে পারে।

কিভাবে সমস্যা রিপোর্ট

আপনার সমস্যাটি সমাধান করার জন্য আমাদের প্রয়োজনীয় তথ্য কীভাবে সরবরাহ করবেন তার নির্দেশাবলীর জন্য, বিল্ড টুল এবং গ্রেডল বাগগুলির বিবরণ দেখুন। তারপর, Google পাবলিক ইস্যু ট্র্যাকার ব্যবহার করে একটি বাগ ফাইল করুন।

আরও সম্পদ

কোটলিনের সাথে লেখা Gradle বিল্ড ফাইলগুলির একটি কার্যকরী উদাহরণের জন্য, GitHub-এ Now In Android নমুনা অ্যাপটি দেখুন।