Kotlin Multiplatform Mobile (KMM) হল JetBrains-এর একটি প্রযুক্তি যা iOS এবং Android অ্যাপ্লিকেশনে Kotlin-এ শেয়ার্ড কোড ব্যবহার করতে দেয়, প্রতিটি প্ল্যাটফর্মে নেটিভ UI সংরক্ষণ করে। হাইব্রিড ফ্রেমওয়ার্কের বিপরীতে, KMM WebView ব্যবহার করে না এবং অ্যাবস্ট্রাকশনের মাধ্যমে ইন্টারফেস রেন্ডার করে না — বিজনেস লজিক একবার লেখা হয়, যখন ইউজার ইন্টারফেস সম্পূর্ণ নেটিভ থাকে। JetBrains, 2025-এর তথ্য অনুযায়ী, সারা বিশ্বে 40,000-এর বেশি টিম KMM ব্যবহার করে। expect/actual হল Kotlin-এর একটি মূল প্রক্রিয়া যা শেয়ার্ড কোডে প্ল্যাটফর্ম-নির্ভর API ঘোষণা করতে দেয়।
মূল বিষয়
Kotlin Multiplatform Mobile (KMM) একটি প্রযুক্তি যা মোবাইল অ্যাপ্লিকেশনের শেয়ার্ড বিজনেস লজিক Kotlin-এ লিখতে এবং কোড ডুপ্লিকেশন ছাড়া iOS এবং Android-এ ব্যবহার করতে দেয়। Ionic বা Cordova-এর বিপরীতে, KMM WebView-এ ইন্টারফেস রেন্ডার করে না — UI সম্পূর্ণ নেটিভ থাকে এবং SwiftUI (iOS) এবং Jetpack Compose (Android)-এ লেখা হয়।
KMM 2019 সালে JetBrains দ্বারা Kotlin Multiplatform কৌশলের অংশ হিসেবে ঘোষণা করা হয়েছিল। অন্যান্য ক্রস-প্ল্যাটফর্ম সমাধান থেকে মূল পার্থক্য হল যে ফ্রেমওয়ার্ক UI একীভূত করার চেষ্টা করে না, বরং ঠিক সেই কোডটি শেয়ার করার উপর ফোকাস করে যা উভয় প্ল্যাটফর্মের জন্য সত্যিই অভিন্ন: নেটওয়ার্ক অনুরোধ, ডেটা মডেল, ফর্ম ভ্যালিডেশন, বিজনেস নিয়ম এবং ডেটাবেস অপারেশন।
JetBrains ডেভেলপার জরিপ (2025) অনুযায়ী, KMM 14% মোবাইল ডেভেলপার দ্বারা ব্যবহৃত হয়, এবং এই হার বার্ষিক 5% বৃদ্ধি পাচ্ছে। প্রযুক্তিটি উচ্চ কর্মক্ষমতা এবং নেটিভ ইউজার অভিজ্ঞতার প্রয়োজনীয়তা সম্পন্ন কোম্পানিগুলি বেছে নেয়, যাদের জন্য হাইব্রিড সমাধান গ্রহণযোগ্য নয়।
KMM আর্কিটেকচার তিনটি মডিউল নিয়ে গঠিত: shared (Kotlin-এ সাধারণ কোড), iosApp (Swift-এ নেটিভ iOS অ্যাপ্লিকেশন), এবং androidApp (Kotlin-এ নেটিভ Android অ্যাপ্লিকেশন)। শেয়ার্ড মডিউল Android-এর জন্য JAR এবং iOS-এর জন্য ইউনিভার্সাল ফ্রেমওয়ার্ক (Apple Framework)-এ কম্পাইল হয়।
শেয়ার্ড মডিউলে সমস্ত প্ল্যাটফর্ম-স্বাধীন স্তর অন্তর্ভুক্ত থাকে: Ktor Client ব্যবহার করে নেটওয়ার্ক স্তর, kotlinx.serialization-এর মাধ্যমে সিরিয়ালাইজেশন সহ ডেটা মডেল, ডেটা ব্যবস্থাপনার জন্য রিপোজিটরি, ফর্ম ভ্যালিডেশন এবং বিজনেস নিয়ম (যেমন ডেলিভারি খরচ গণনা বা অ্যাক্সেস অনুমতি পরীক্ষা)।
শেয়ার্ড মডিউল Gradle Multiplatform Plugin ব্যবহার করে এবং তিনটি সোর্স সেট ধারণ করে: commonMain (সাধারণ কোড), androidMain (Android-নির্দিষ্ট বাস্তবায়ন), এবং iosMain (iOS-নির্দিষ্ট বাস্তবায়ন)। Kotlin/Native কম্পাইলার সাধারণ কোডকে iOS-এর জন্য নেটিভ লাইব্রেরিতে রূপান্তর করে, যা XCFramework-এর মাধ্যমে Swift প্রকল্পের সাথে সংযুক্ত হয়।
Android মডিউল — Jetpack Compose বা ViewBinding সহ Kotlin-এ একটি মানক Android অ্যাপ্লিকেশন। শেয়ার্ড মডিউল একটি সাধারণ Gradle নির্ভরতা হিসাবে সংযুক্ত হয়, এবং commonMain-এর সমস্ত ক্লাস সরাসরি অ্যাক্সেসযোগ্য।
iOS মডিউল Swift বা Objective-C-তে একটি Xcode প্রকল্প। শেয়ার্ড মডিউল CocoaPods, Swift Package Manager বা XCFramework-এর মাধ্যমে সংযুক্ত হয়। Kotlin/Native Kotlin টাইপ এক্সপোর্ট করার জন্য Objective-C হেডার জেনারেট করে, যা Swift থেকে অ্যাক্সেসযোগ্য করে তোলে।
expect/actual হল Kotlin Multiplatform-এর একটি প্রক্রিয়া যা শেয়ার্ড কোডে API ঘোষণা করতে (expect ডিক্লারেশন) এবং প্রতিটি প্ল্যাটফর্মের জন্য আলাদাভাবে এর বাস্তবায়ন প্রদান করতে (actual ডিক্লারেশন) দেয়। কম্পাইলার নিশ্চিত করে যে প্রতিটি লক্ষ্য প্ল্যাটফর্মের জন্য actual বিদ্যমান।
expect/actual-এর সাধারণ ব্যবহারের ক্ষেত্র: টাইম জোন সহ বর্তমান সময় পাওয়া, SharedPreferences (Android) / UserDefaults (iOS)-এর সাথে কাজ করা, ক্রিপ্টোগ্রাফিক ফাংশন এবং UUID জেনারেশন। প্রতিটি প্ল্যাটফর্ম তার নিজস্ব সিস্টেম API ব্যবহার করে।
expect/actual ছাড়া, একীভূত বিজনেস লজিক কোড রাখা অসম্ভব হবে, কারণ ফাইল সিস্টেম, নেটওয়ার্ক এবং স্টোরেজের সাথে কাজ করার APIগুলি iOS এবং Android-এর মধ্যে সিস্টেম কল স্তরে ভিন্ন। প্রক্রিয়াটি নিশ্চিত করে যে ডেভেলপার প্ল্যাটফর্ম-নির্দিষ্ট অংশ বাস্তবায়ন করতে ভুলবেন না।
ক্যামেরা বা বায়োমেট্রিক্সের সাথে কাজ করার মতো প্ল্যাটফর্ম কলের জন্য, KMM expect/actual প্রক্রিয়াটি Cordova-এর মতো প্লাগইনের সাথে প্রদান করে, কিন্তু Kotlin/Native-তে। JetBrains kotlinx-datetime লাইব্রেরিও প্রকাশ করেছে, যা তারিখ এবং সময় পরিচালনাকে অ্যাবস্ট্রাক্ট করে।
আসুন UUID জেনারেশনের জন্য expect ফাংশন ডিক্লারেশন এবং iOS এবং Android-এর জন্য এর বাস্তবায়ন সহ KMM প্রকল্পের মৌলিক কাঠামো দেখি।
// commonMain — সাধারণ ঘোষণা
expect fun generateUUID(): String
// androidMain — Android-এর জন্য বাস্তবায়ন
actual fun generateUUID(): String {
return java.util.UUID.randomUUID().toString()
}
// iosMain — iOS-এর জন্য বাস্তবায়ন
actual fun generateUUID(): String {
return platform.Foundation.NSUUID().UUIDString
}
শেয়ার্ড কোডে, expect fun generateUUID() ঘোষণা করা হয়। Android java.util.UUID ব্যবহার করে, যখন iOS Foundation ফ্রেমওয়ার্ক থেকে NSUUID ব্যবহার করে। শেয়ার্ড মডিউলের বাকি কোডে, এই ফাংশনটি প্ল্যাটফর্ম নির্বিশেষে কল করা হয়।
শেয়ার্ড কোডে Ktor Client ব্যবহার করে নেটওয়ার্ক অনুরোধের উদাহরণ:
import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class User(
val id: Int,
val name: String
)
class UserRepository {
private val client = HttpClient()
suspend fun getUser(id: Int): User {
val response: HttpStatement =
client.get("https://api.example.com/users/$id")
return Json.decodeFromString(response.bodyAsText())
}
}
এই কোডটি কোনো পরিবর্তন ছাড়াই উভয় প্ল্যাটফর্মে কাজ করে। Ktor Client Android-এ OkHttp এবং iOS-এ NSURLSession স্বয়ংক্রিয়ভাবে ব্যবহার করে, কোনো অতিরিক্ত কনফিগারেশন ছাড়া। kotlinx.serialization-এর মাধ্যমে JSON সিরিয়ালাইজেশনও ক্রস-প্ল্যাটফর্ম।
KMM ক্রস-প্ল্যাটফর্ম প্রযুক্তির মধ্যে একটি অনন্য অবস্থান দখল করে, কারণ এটি Flutter এবং React Native-এর বিপরীতে নেটিভ UI প্রতিস্থাপনের চেষ্টা করে না। KMM লজিক শেয়ার করার একটি সমাধান, ইন্টারফেস একীভূত করার নয়।
| মাপকাঠি | KMM | Flutter | React Native |
|---|---|---|---|
| UI | নেটিভ (SwiftUI / Jetpack Compose) | কাস্টম ইঞ্জিন (Skia) | JavaScript → নেটিভ কম্পোনেন্ট |
| ভাষা | Kotlin (শেয়ার্ড) + Swift / Kotlin (UI) | Dart | JavaScript / TypeScript |
| কর্মক্ষমতা | সর্বোচ্চ (নেটিভ UI) | উচ্চ (কাস্টম রেন্ডারিং) | মধ্যম (JS-নেটিভ ব্রিজ) |
| কোড শেয়ারিং | বিজনেস লজিক (40–70%) | UI + লজিক (80–95%) | UI + লজিক (70–90%) |
| প্রবেশের বাধা | উচ্চ (দুটি ভাষা) | মধ্যম (একটি ভাষা) | নিম্ন (ওয়েব ডেভেলপার) |
KMM-এর প্রধান সুবিধা হল UI-এর উপর সম্পূর্ণ নিয়ন্ত্রণ। যদি কোনো অ্যাপ্লিকেশনকে প্রতিটি প্ল্যাটফর্মে নেটিভ দেখাতে এবং আচরণ করতে হয় (উদাহরণস্বরূপ, প্ল্যাটফর্ম অ্যানিমেশন সহ iOS TabBar এবং Android BottomNavigation ব্যবহার করা), তাহলে KMM-ই একমাত্র ক্রস-প্ল্যাটফর্ম সমাধান যা কোনো সমঝোতা ছাড়াই এটি প্রদান করে।
অসুবিধা হল যে টিমকে একই সাথে Kotlin, Swift, Jetpack Compose এবং SwiftUI জানতে হবে, যা নিয়োগকে জটিল করে তোলে। Flutter এবং React Native-এর জন্য একটি ভাষা এবং একটি ফ্রেমওয়ার্কের জ্ঞান যথেষ্ট।
Kotlin Multiplatform Mobile একটি শক্তিশালী প্রযুক্তি, কিন্তু এটি গ্রহণের জন্য একটি সুষম দৃষ্টিভঙ্গি প্রয়োজন। আসুন মূল সুবিধা এবং টিমগুলির মুখোমুখি হওয়া সাধারণ চ্যালেঞ্জগুলি পরীক্ষা করি।
প্রথম এবং সবচেয়ে গুরুত্বপূর্ণ সুবিধা হল কোড ডুপ্লিকেশন হ্রাস করা। JetBrains কেস স্টাডিজ (2024) অনুযায়ী, KMM গ্রহণকারী টিমগুলি নেটওয়ার্ক স্তরের জন্য 60–80% এবং সামগ্রিক বিজনেস লজিকের জন্য 40–50% ডুপ্লিকেট কোড হ্রাস করে। এটি সরাসরি ডেভেলপমেন্ট গতি এবং বাগের সংখ্যাকে প্রভাবিত করে।
দ্বিতীয় সুবিধা হল নেটিভ অ্যাপ্লিকেশনের স্তরে কর্মক্ষমতা। হাইব্রিড ফ্রেমওয়ার্কের বিপরীতে, KMM UI এবং সিস্টেমের মধ্যে অ্যাবস্ট্রাকশন স্তর যোগ করে না। বিজনেস লজিক কোড তত দ্রুত চলে যত দ্রুত প্রতিটি প্ল্যাটফর্মের জন্য আলাদাভাবে Swift বা Kotlin-এ লেখা হলে চলত।
মূল চ্যালেঞ্জ হল টিমের যোগ্যতা। ডেভেলপারদের Kotlin (শেয়ার্ড মডিউলের জন্য) পাশাপাশি Swift এবং Jetpack Compose (UI-এর জন্য) জানতে হবে। একজন সার্বজনীন বিশেষজ্ঞ খুঁজে পাওয়া কঠিন, তাই টিমগুলি সাধারণত Android এবং iOS ডেভেলপারদের নিয়ে গঠিত হয় যারা যৌথভাবে শেয়ার্ড মডিউল রক্ষণাবেক্ষণ করে।
দ্বিতীয় চ্যালেঞ্জ হল টুলিং। KMM-এর জন্য Gradle, CocoaPods বা Swift Package Manager কনফিগার করার পাশাপাশি Xcode-এর সাথে একীভূতকরণ প্রয়োজন। প্রকল্পের প্রাথমিক পর্যায়ে, বিল্ড কনফিগারেশন সমস্যা সাধারণ, বিশেষ করে C লাইব্রেরির সাথে কাজ করার সময়।
তৃতীয় চ্যালেঞ্জ হল ডিবাগিং। যখন Kotlin/Native এবং Swift-এর সংযোগস্থলে একটি বাগ ঘটে, তখন মনোলিথিক অ্যাপ্লিকেশনের তুলনায় এর কারণ নির্ধারণ করা আরও কঠিন। JetBrains ক্রমাগত ডিবাগিং টুল উন্নত করছে, কিন্তু বাস্তবে, টিমগুলি তাদের সময়ের 20% পর্যন্ত অবকাঠামো কাজে ব্যয় করে।
সচরাচর জিজ্ঞাসা
হ্যাঁ, KMM iOS কে একমাত্র লক্ষ্য প্ল্যাটফর্ম হিসাবে সমর্থন করে। শেয়ার্ড মডিউল একটি iOS ফ্রেমওয়ার্কে কম্পাইল হয় যা XCFramework-এর মাধ্যমে Swift প্রকল্পের সাথে সংযুক্ত হয়। Android মডিউল তৈরি করার প্রয়োজন নেই। এটি সেই টিমগুলির জন্য উপযোগী যারা iOS অ্যাপ্লিকেশনের বিজনেস লজিকের জন্য Kotlin ব্যবহার করতে চায়।
Kotlin/Native একটি কম্পাইলার যা Kotlin কোডকে ভার্চুয়াল মেশিন ছাড়া নেটিভ বাইনারিতে রূপান্তর করে। KMM iOS-এর জন্য শেয়ার্ড মডিউল কম্পাইল করতে Kotlin/Native ব্যবহার করে। Android-এর জন্য, KMM স্ট্যান্ডার্ড Kotlin/JVM কম্পাইলার ব্যবহার করে। Kotlin/Native হল KMM-এর প্রযুক্তিগত ভিত্তি।
লোকাল ডেটাবেস-এর সাথে কাজ করার জন্য KMM-এ SQLDelight ব্যবহার করা হয় — একটি ক্রস-প্ল্যাটফর্ম লাইব্রেরি যা SQL কোয়েরি থেকে Kotlin কোড জেনারেট করে। Android-এ এটি Android SQLite API-এর মাধ্যমে কাজ করে, iOS-এ নেটিভ SQLite (CFNetwork)-এর মাধ্যমে। একটি বিকল্প হল MongoDB-এর Realm Kotlin SDK।
KMM ডিফল্টরূপে UI কম্পোনেন্ট অন্তর্ভুক্ত করে না — UI SwiftUI এবং Jetpack Compose-এ আলাদাভাবে লেখা হয়। তবে, Compose Multiplatform (JetBrains থেকে)-এর মতো লাইব্রেরি রয়েছে যা নেটিভ ফ্রেমওয়ার্ক ছাড়া সরাসরি iOS এবং Android-এ Kotlin-এ UI রেন্ডার করতে দেয়।
KMM বড় কোম্পানিগুলি ব্যবহার করে: Netflix (সুপারিশ লজিক শেয়ারিং), McDonald's (মোবাইল অ্যাপ্লিকেশন), VMWare (এন্টারপ্রাইজ অ্যাপ্লিকেশন), এবং Leroy Merlin (নির্মাণ সামগ্রী অ্যাপ্লিকেশন)। তালিকা বাড়ছে কারণ JetBrains ইকোসিস্টেম উন্নয়নে সক্রিয়ভাবে বিনিয়োগ করছে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন