Gradle KTS হল Gradle বিল্ড সিস্টেমের জন্য একটি Kotlin DSL যা Groovy-এর পরিবর্তে Kotlin ভাষায় বিল্ড স্ক্রিপ্ট লেখার অনুমতি দেয়। .gradle.kts এক্সটেনশন সহ ফাইলগুলি স্ট্যাটিক টাইপিং, IntelliJ IDEA এবং Android Studio-তে অটো-কমপ্লিশন, এবং Kotlin সিনট্যাক্সের মাধ্যমে Gradle API-তে সরাসরি অ্যাক্সেস সমর্থন করে। Google AGP 7.0 থেকে শুরু করে Android প্রকল্পগুলির জন্য KTS সুপারিশ করে, এবং Kotlin Multiplatform KTS-কে মানক কনফিগারেশন ফর্ম্যাট হিসাবে ব্যবহার করে। Gradle, 2025 অনুসারে, 60% এরও বেশি নতুন প্রকল্প বিল্ড স্ক্রিপ্ট লেখার জন্য Groovy-এর পরিবর্তে KTS বেছে নেয়।
মূল পয়েন্ট
Gradle KTS হল একটি Kotlin DSL (ডোমেইন স্পেসিফিক ল্যাঙ্গুয়েজ) যা Gradle কনফিগারেশন ফাইল লেখার জন্য Groovy-এর একটি বিকল্প প্রদান করে। Groovy সিনট্যাক্সের পরিবর্তে, ডেভেলপাররা Kotlin ব্যবহার করে — একটি কঠোরভাবে টাইপ করা ভাষা যা কম্পাইল সময়ে কনফিগারেশনের সঠিকতা যাচাই করে। KTS প্রথম 2018 সালে Gradle 5.0-তে একটি পরীক্ষামূলক বৈশিষ্ট্য হিসাবে চালু হয়েছিল এবং Gradle 6.0-তে স্থিতিশীলতায় পৌঁছেছিল।
KTS-এর মূল লক্ষ্য হল বিল্ড স্ক্রিপ্টে Groovy-এর ত্রুটিগুলি দূর করা। Groovy হল একটি ডায়নামিকভাবে টাইপ করা ভাষা যেখানে কনফিগারেশন ত্রুটিগুলি শুধুমাত্র একটি কাজ সম্পাদনের সময় রানটাইমে প্রকাশ পায়। KTS Kotlin-এর স্ট্যাটিক টাইপিং-এর জন্য কোড সম্পাদনা পর্যায়ে একই ত্রুটিগুলি সনাক্ত করতে দেয়। অতিরিক্তভাবে, KTS সম্পূর্ণ টাইপ ডকুমেন্টেশন সহ Gradle API-তে অ্যাক্সেস প্রদান করে, যা জটিল কনফিগারেশন ব্লকগুলি শেখা এবং ব্যবহার করা উল্লেখযোগ্যভাবে সহজ করে।
KTS ইকোসিস্টেম সমস্ত প্রধান টুল দ্বারা সমর্থিত: Android Studio, IntelliJ IDEA, Kotlin প্লাগইন সহ VS Code এবং Gradle Build Tool। সমস্ত আধুনিক প্লাগইন (Android Gradle Plugin, Kotlin Multiplatform, Protobuf, Compose) স্পষ্ট টাইপ সহ Kotlin-বান্ধব API প্রদান করে, যা KTS-কে নতুন প্রকল্পের জন্য পছন্দের বিকল্প করে তোলে।
Gradle KTS .gradle.kts ফাইল প্রক্রিয়া করার জন্য Kotlin কম্পাইলার ব্যবহার করে। Gradle এক্সটেনশন চিনতে পারে এবং স্ক্রিপ্টগুলি Kotlin স্ক্রিপ্টিং ইঞ্জিনে পাঠায়, যা সেগুলিকে ক্লাসে কম্পাইল করে। এই ক্লাসগুলি তারপর প্রকল্প মডেল তৈরি করতে Gradle দ্বারা কার্যকর করা হয়। Groovy থেকে মূল পার্থক্য: KTS স্ক্রিপ্টগুলি আগে থেকে কম্পাইল করা হয়, ডায়নামিকভাবে ইন্টারপ্রিট করা হয় না, যা কাজ শুরু করার আগে ত্রুটিগুলি সনাক্ত করতে দেয়।
KTS আর্কিটেকচার kotlin-scripting-এর উপর ভিত্তি করে তৈরি। প্রতিটি .gradle.kts ফাইল হল Gradle API-এর অন্তর্নিহিত ইম্পোর্ট সহ একটি Kotlin স্ক্রিপ্ট। ডেভেলপার যেকোনো Kotln কনস্ট্রাক্ট ব্যবহার করতে পারে: এক্সটেনশন ফাংশন, ল্যাম্বডা, ডেটা ক্লাস এবং এমনকি বিল্ড স্ক্রিপ্টের ভিতরে সহায়ক ফাংশন ঘোষণা করতে পারে। Gradle ব্লকগুলির টাইপকৃত কনফিগারেশনের জন্য এক্সটেনশন ফাংশনের একটি সেট প্রদান করে: dependencies, android, kotlin এবং অন্যান্য।
plugins {
id("com.android.application") version "8.4.0"
kotlin("android") version "2.0.21"
}
android {
namespace = "com.itsectr.app"
compileSdk = 34
defaultConfig {
applicationId = "com.itsectr.app"
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
}
}
dependencies {
implementation(platform("androidx.compose:compose-bom:2024.06.00"))
implementation("androidx.compose.ui:ui")
implementation("androidx.core:core-ktx:1.13.1")
}
KTS এবং Groovy-এর মধ্যে মূল পার্থক্যগুলির মধ্যে একটি হল টাইপ হ্যান্ডলিং। Groovy-তে, সমস্ত কনফিগারেশন Object গ্রহণ করে, যেখানে KTS-তে তারা নির্দিষ্ট Kotlin টাইপ গ্রহণ করে। উদাহরণস্বরূপ, compileSdk Int গ্রহণ করে, একটি স্ট্রিং নয়। এটি ভুল টাইপ সম্পর্কিত ত্রুটিগুলি দূর করে: Groovy-তে, compileSdk 34 এবং compileSdk "34" একইভাবে কাজ করে, যেখানে KTS-তে শুধুমাত্র প্রথম বিকল্পটি বৈধ। এই কঠোরতা কনফিগারেশনকে আরও পূর্বাভাসযোগ্য এবং ডকুমেন্টেড করে তোলে।
Groovy ছিল Gradle-এর মূল DSL এবং এটি সম্পূর্ণরূপে সমর্থিত রয়ে গেছে। তবে, KTS বেশ কিছু সুবিধা প্রদান করে যা এটিকে নতুন প্রকল্পের জন্য সুপারিশকৃত বিকল্প করে তোলে। স্ট্যাটিক টাইপিং, IDE-তে ভালো সম্পাদনা কর্মক্ষমতা এবং কঠোর সিনট্যাক্স হল KTS-এ স্যুইচ করার প্রধান কারণ। একই সময়ে, Groovy সাধারণ কনফিগারেশনের জন্য সংক্ষিপ্ততায় তার সুবিধা ধরে রেখেছে।
স্ক্রিপ্ট কম্পাইলেশনের পর KTS এবং Groovy-তে বিল্ড কর্মক্ষমতা প্রায় অভিন্ন। প্রথমবার চালানোর বা ক্যাশ সাফ করার পর KTS স্ক্রিপ্ট কম্পাইল হতে বেশি সময় নেয়, কিন্তু পরবর্তী বিল্ডগুলি Groovy স্ক্রিপ্টের মতো একই গতিতে চলে। Gradle কম্পাইল করা KTS স্ক্রিপ্টগুলি বিল্ড ডিরেক্টরিতে ক্যাশ করে, তাই স্ক্রিপ্ট পরিবর্তন হলে শুধুমাত্র পুনরায় কম্পাইলেশন ঘটে।
| বৈশিষ্ট্য | Gradle KTS | Groovy DSL |
|---|---|---|
| টাইপিং | স্ট্যাটিক, কম্পাইল সময়ে যাচাই করা হয় | ডায়নামিক, রানটাইমে যাচাই করা হয় |
| IDE সমর্থন | অটো-কমপ্লিশন + নেভিগেশন + রিফ্যাক্টরিং | সীমিত (ডায়নামিক টাইপিং) |
| ব্লক সিনট্যাক্স | রিসিভার সহ ল্যাম্বডা (টাইপকৃত) | ক্লোজার (অটাইপকৃত) |
| প্রপার্টি অ্যাসাইনমেন্ট | = সহ (compileSdk = 34) | = চিহ্ন ছাড়া (compileSdk 34) |
| প্রথম কম্পাইলেশন | ধীর (Kotlin কম্পাইলেশন) | দ্রুত (ইন্টারপ্রিটেশন) |
| পরবর্তী বিল্ড | অভিন্ন (স্ক্রিপ্ট ক্যাশ) | অভিন্ন |
2026 সালে KTS এবং Groovy-এর মধ্যে পছন্দ স্পষ্ট: নতুন প্রকল্পের জন্য — KTS। Google, JetBrains এবং Gradle সমস্ত নতুন প্রকল্পের জন্য KTS সুপারিশ করে। Groovy লিগ্যাসি প্রকল্পগুলি রক্ষণাবেক্ষণের জন্য প্রাসঙ্গিক রয়ে গেছে যেখানে কনফিগারেশনের পরিমাণ বা KTS-এর সাথে বেমানান নির্দিষ্ট প্লাগইনের কারণে মাইগ্রেশন অবাস্তব।
Android, Kotlin Multiplatform এবং Compose Multiplatform-এর জন্য KTS-এ সাধারণ কনফিগারেশন ব্লকগুলি দেখি। KTS সহ একটি Android প্রকল্পের buildTypes এবং productFlavors কনফিগারেশনে স্পষ্ট টাইপ নির্দিষ্ট করতে হয়। নীচের উদাহরণটি দুটি ফ্লেভার সহ একটি অ্যাপ্লিকেশন সেট আপ করা দেখায়।
android {
buildTypes {
val release = getByName("release") {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
getByName("debug") {
applicationIdSuffix = ".debug"
}
}
flavorDimensions += "version"
productFlavors {
register("demo") {
dimension = "version"
versionNameSuffix = "-demo"
}
register("full") {
dimension = "version"
}
}
}
Kotlin Multiplatform-এর জন্য, KTS বাধ্যতামূলক — Groovy সঠিকভাবে মাল্টিপ্ল্যাটফর্ম মডিউলের কনফিগারেশন সমর্থন করে না। KMM মডিউল কনফিগারেশনে টার্গেট প্ল্যাটফর্ম এবং সোর্স সেট সেট আপ করা অন্তর্ভুক্ত। নীচের উদাহরণটি iOS এবং Android সহ শেয়ার্ড মডিউল কনফিগারেশন দেখায়।
kotlin {
androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = "17"
}
}
}
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "Shared"
isStatic = true
}
}
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
androidMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
}
}
}
KTS বিল্ড স্ক্রিপ্টের ভিতরে সহায়ক Kotlin ফাংশন ঘোষণা করার অনুমতি দেয়। এটি পুনরাবৃত্তিমূলক কনফিগারেশন যেমন signing configs বা সংস্করণ পরিচালনার জন্য বিশেষভাবে সুবিধাজনক। স্ট্যাটিক টাইপিং-এর জন্য ধন্যবাদ, এই জাতীয় ফাংশনগুলি কম্পাইল সময়ে প্যারামিটার যাচাইকরণের সাথে কল করা যেতে পারে, Google Play-তে প্রকাশের আগে signing কনফিগারেশনে ত্রুটিগুলি দূর করে।
fun Project.configureSigning() {
android {
signingConfigs {
register("release") {
storeFile = file("release.keystore")
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD")
}
}
}
}
// build.gradle.kts-এ ব্যবহার
configureSigning()
Groovy থেকে KTS-এ মাইগ্রেশন是一个 ধীরে ধীরে করা যেতে পারে এমন একটি প্রক্রিয়া। Gradle মিশ্র প্রকল্প সমর্থন করে যেখানে কিছু মডিউল Groovy (build.gradle) এবং কিছু KTS (build.gradle.kts) ব্যবহার করে। settings.gradle এবং রুট build.gradle প্রথমে মাইগ্রেট করা যেতে পারে কারণ তারা মডিউল প্লাগইনের উপর নির্ভর করে না। Google settings.gradle.kts, তারপর রুট build.gradle.kts এবং তার পরেই মডিউল দিয়ে মাইগ্রেশন শুরু করার সুপারিশ করে।
মাইগ্রেশনের মূল ধাপগুলির মধ্যে রয়েছে: ক্লোজার সিনট্যাক্সকে ল্যাম্বডা দিয়ে প্রতিস্থাপন করা, অ্যাসাইনমেন্টের জন্য = চিহ্ন যোগ করা, স্ট্রিং কীগুলি টাইপকৃত ধ্রুবক দিয়ে প্রতিস্থাপন করা এবং স্পষ্ট ভেরিয়েবল টাইপিং। Android Studio সাধারণ ব্লকগুলির জন্য স্বয়ংক্রিয় Groovy → KTS রূপান্তর প্রদান করে, কিন্তু নেস্টেড ক্লোজার সহ জটিল কনফিগারেশনগুলির জন্য ম্যানুয়াল পুনর্লিখন প্রয়োজন।
| Groovy (ছিল) | KTS (হয়েছে) |
|---|---|
| compileSdk 34 | compileSdk = 34 |
| buildTypes { release { ... } } | buildTypes { getByName("release") { ... } } |
| implementation 'com.android.x:y:1.0' | implementation("com.android.x:y:1.0") |
| flavorDimensions "version" | flavorDimensions += "version" |
| productFlavors { demo { ... } } | productFlavors { register("demo") { ... } } |
| def vsn = "1.0" | val vsn = "1.0" |
সাধারণ মাইগ্রেশন সমস্যাগুলির মধ্যে অন্তর্নিহিত Groovy পদ্ধতি কলগুলি অন্তর্ভুক্ত যার কোনো Kotlin সমতুল্য নেই, এবং প্লাগইনগুলি যা Kotlin-বান্ধব API প্রদান করে না। প্রথম সমস্যার জন্য, Gradle withGroovyBuilder-এর মাধ্যমে সামঞ্জস্যতা প্রদান করে — একটি প্রক্রিয়া যা KTS থেকে Groovy পদ্ধতি কল করার অনুমতি দেয়। দ্বিতীয়টির জন্য — প্লাগইন আপডেটের জন্য অপেক্ষা করা বা সম্পূর্ণ মাইগ্রেশন পর্যন্ত এটি একটি Groovy মডিউলে ব্যবহার করা প্রয়োজন।
Kotlin Multiplatform হল প্রাথমিক প্রকল্প যেখানে KTS একটি বাধ্যতামূলক প্রয়োজনীয়তা। kotlin multiplatform প্লাগইন টার্গেট প্ল্যাটফর্ম, সোর্স সেট এবং ফ্রেমওয়ার্ক বাইনারিগুলির কনফিগারেশনের জন্য এক্সটেনশন প্রদান করে যা শুধুমাত্র Kotlin DSL-এর মাধ্যমে উপলব্ধ। Groovy সঠিকভাবে মাল্টিপ্ল্যাটফর্ম কনফিগারেশন সমর্থন করে না, তাই KMM প্রকল্পগুলি একচেটিয়াভাবে KTS ব্যবহার করে।
KTS-এ KMM কনফিগারেশনে অ-মানক ব্লক অন্তর্ভুক্ত রয়েছে: প্ল্যাটফর্ম নির্দিষ্ট করার জন্য kotlin.target, সাধারণ এবং প্ল্যাটফর্ম-নির্দিষ্ট কোড সংগঠিত করার জন্য kotlin.sourceSets, CocoaPods ইন্টিগ্রেশনের জন্য kotlin.cocoapods এবং JDK নির্বাচনের জন্য kotlin.jvmToolchain। প্রতিটি ব্লকে Android Studio-তে অটো-কমপ্লিশন সহ কঠোরভাবে টাইপ করা API রয়েছে, যা একাধিক প্ল্যাটফর্ম সহ জটিল KMM প্রকল্প কনফিগারেশনের জন্য বিশেষভাবে মূল্যবান।
kotlin {
iosArm64()
iosSimulatorArm64()
iosX64()
cocoapods {
summary = "Shared Kotlin module"
homepage = "https://itsectr.com"
framework {
baseName = "Shared"
isStatic = false
}
pod("Alamofire") {
version = "5.9"
}
}
}
KTS স্ট্যাটিক টাইপিং-এর জন্য ধন্যবাদ, KMM ডেভেলপাররা সোর্স সেট এবং নির্ভরতার জন্য অটো-কমপ্লিশন, ফ্রেমওয়ার্ক কনফিগারেশনের টাইপ চেকিং এবং প্ল্যাটফর্ম নামগুলি রিফ্যাক্টর করার ক্ষমতা পায়। KTS ডিবাগিংকেও সহজ করে: KMM কনফিগারেশনে ত্রুটিগুলি স্পষ্ট বার্তা সহ Kotlin কম্পাইলেশন ত্রুটি হিসাবে প্রদর্শিত হয়, Groovy-এর বিপরীতে যেখানে Gradle টাস্ক কার্যকর না হওয়া পর্যন্ত ত্রুটিগুলি লুকানো থাকতে পারে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Kotlin Multiplatform প্রকল্পের জন্য এটি বাধ্যতামূলক। Android এবং সার্ভার প্রকল্পের জন্য, Groovy সমর্থিত থাকে, কিন্তু Google এবং Gradle স্ট্যাটিক টাইপিং এবং ভালো IDE সমর্থনের কারণে নতুন প্রকল্পের জন্য KTS সুপারিশ করে।
হ্যাঁ, Gradle মিশ্র প্রকল্প সমর্থন করে। প্রতিটি মডিউল তার নিজস্ব DSL ব্যবহার করতে পারে। settings.gradle বা settings.gradle.kts রুট DSL নির্ধারণ করে, কিন্তু মডিউলগুলি স্বাধীন। এটি ধীরে ধীরে মাইগ্রেশনের অনুমতি দেয়।
KTS-কে কার্যকর করার আগে Kotlin কম্পাইলেশন প্রয়োজন। প্রথমবার চালানোর বা ক্যাশ সাফ করার পর এটি অতিরিক্ত সময় নেয়। সমস্ত পরবর্তী বিল্ড Groovy-এর সাথে তুলনীয় গতিতে ক্যাশ করা ক্লাস ব্যবহার করে।
বেশিরভাগ আধুনিক প্লাগইন সামঞ্জস্যপূর্ণ। পুরানো প্লাগইনগুলির সাথে সমস্যা দেখা দেয় যা Groovy-নির্দিষ্ট API বা Kotlin সমতুল্য ছাড়া ক্লোজার ব্যবহার করে। এই জাতীয় প্লাগইনের জন্য, withGroovyBuilder() ব্যবহার করুন বা মডিউলটি Groovy-তে রাখুন।
প্রাথমিক স্ক্রিপ্ট কম্পাইলেশনের পর, বিল্ড কর্মক্ষমতা Groovy-এর মতোই। Gradle কম্পাইল করা KTS স্ক্রিপ্টগুলি ক্যাশ করে, এবং সেগুলি পরিবর্তন হলে শুধুমাত্র পুনরায় কম্পাইলেশন ঘটে। মডিউল বিল্ড গতির পার্থক্য নগণ্য।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন