কটলিন মাল্টিপ্ল্যাটফর্ম
কটলিন ব্যবহার করে খুব সহজে একাধিক প্ল্যাটফর্মের জন্য অ্যাপ তৈরি করা যায়। অন্য সব মাল্টিপ্ল্যাটফর্মের সাথে এর কিছু পার্থক্য রয়েছে। কটলিন মাল্টি-প্ল্যাটফর্ম অ্যাপের UI ন্যাটিভে লিখতে পারব। শুধু মাত্র বিজনেস লজিক একাধিক প্ল্যাটফর্মে আমরা শেয়ার করতে পারব। এর মানে iOS এর জন্য SwiftUI ব্যবহার করে UI কোড লিখতে পারব। আবার এন্ড্রয়েডের জন্য Jetpack Compose বা XML বেইজড UI কোড লিখতে পারব।
কিভাবে কটলিন মাল্টিপ্ল্যাটফর্ম অ্যাপ তৈরি করা যায়, একটু পর লিখছি। এর আগে কম্পোজ মাল্টিপ্ল্যাটফর্ম ও জেটপ্যাক কম্পোজ সম্পর্কে একটু জেনে নেই।
জেটপ্যাক কম্পোজ
জেটপ্যাক কম্পোজ হচ্ছে অ্যান্ড্রয়েড অ্যাপের UI তৈরি করার জন্য জন্য ডিক্লারেটিভ ফ্রেমওয়ার্ক। SwiftUI, ফ্লাটার বা রিয়েক্টের মত। যেখানে কটলিন প্রোগ্রামিং ব্যবহার করে আমরা UI কোড লিখতে পারব।
আমার দেখা মোবাইলের UI ডেভেলপমেন্টের জন্য সেরা ফ্রেমওয়ার্ক হচ্ছে SwiftUI। যদিও তা শুধু মাত্র অ্যাপল স্পেসিফিক। সুইফটইউআই এর অনেক কিছুই জেটপ্যাকের সাথে মিলবে। SwiftUI তে কাজ করলে সহজে জেটপ্যাক কম্পোজে কাজ করতে পারবে। উল্টাভাবেও সঠিক।
জেটপ্যাক কম্পোজ হচ্ছে অ্যান্ড্রয়েড স্পেসিফিক। এর মানে শুধু SwiftUI যেমন আমরা অ্যাপল এনভারনমেন্টের বাহিরে ব্যবহার করতে পারি না, তেমনি জেটপ্যাক কম্পোজও অ্যান্ড্রয়েডের বাহিরে ব্যবহার করতে পারি না। সমাধান? কম্পোজ মাল্টিপ্যাটফর্ম!
কম্পোজ মাল্টিপ্ল্যাটফর্ম
কম্পোজ মাল্টিপ্যাটফর্ম জেটপ্যাক কম্পোজের উপর ভিত্তি করে তৈরি। যা ব্যবহার করে ক্রস প্ল্যাটফর্মের জন্য আমরা UI ডেভেলপ করতে পারব। একই UI কোড সব গুলো প্ল্যাটফর্মে ব্যবহার করতে পারব। রিয়েক্ট অথবা ফ্লাটারের মত। সুবিধা হচ্ছে কটলিন ব্যবহার করেই কোড লিখতে পারব। মোবাইল, ওয়েব, ডেস্কটপ সব প্ল্যাটফর্মের জন্য একই কোডবেজ ব্যবহার করার মত শান্তি আর কি হতে পারে?
কম্পোজ মাল্টিপ্ল্যাটফর্ম এখনো নতুন। এমনকি এখনো অ্যান্ড্রয়েড স্টুডিও থেকে মাল্টিপ্ল্যাটফর্ম অ্যাপ তৈরি করা যায় না। ব্রাউজারে অ্যাপ জেনারেট করে এরপর ব্যবহার করতে হয়। এরপরও আমার কাছে মনে হয় এর ব্যবহার আস্তে আস্তে বাড়বে। এর কারণ কটলিন। একই প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে সব কাজ করে নিতে পারা।
কটলিন মাল্টিপ্ল্যাটফর্ম অ্যাপ তৈরি
প্রথমে আমাদের অ্যান্ড্রয়েড স্টুডিও ইন্সটল করতে হবে। এরপর অ্যান্ড্রয়েড স্টুডিওতে Kotlin Multiplatform Plugin ইন্সটল করতে হবে।
অ্যান্ড্রয়েড স্টুডিও ওপেন করে প্ল্যাগিন এ ক্লিক করে মার্কেটপ্লেস ট্যাবে ক্লিক করে Kotlin Multiplatform সার্চ করে ইন্সটল করে নেওয়া যাবে। ইন্সটল শেষে IDE রিস্টার্ট করে নিতে হবে।
এরপর নতুন অ্যান্ড্রয়েড প্রজেক্ট তৈরি করতে গেলে Kotlin Multiplatform App তৈরির টেম্পলেট পাওয়া যাবে। ডিফল্ট সেটিং ব্যবহার করে অ্যাপ তৈরি করে নিব।
এখানে অ্যান্ড্রয়েড এবং iOS দুইটা প্ল্যাটফর্মেই অ্যাপ রান করা যাবে। iOS অ্যাপ রান করতে হলে macOS লাগবে। এবং ম্যাকে Xcode ইন্সটল করা থাকতে হবে। ম্যাকে এন্ড্রয়েড স্টুডিও থেকেই iOS সিম্যুলেটরে অ্যাপ রান করা যাবে। কনফিগারেশন সিলেকশন থেকে ডেসটিনেশন সিলেক্ট করা যাবে।
iOS এবং অ্যান্ড্রয়েড, দুইটা আলাদা আলাদা UI ফ্রেমওয়ার্ক ব্যবহার করছে। যেমন iOS এর জন্য ব্যবহার করছে SwiftUI এবং এন্ড্রয়েডের জন্য কম্পোজ।
অ্যাপ অ্যান্ড্রয়েডে রান করলে লেখা উঠবে:
Hello, Android!
এবং iOS এ রান করলে লেখা উঠবে:
Hello, iOS!
দুইটা প্ল্যাটফর্মেই একই কোড (shared/src/commonMain/kotlin/Greeting.kt) থেকে আউটপুট দিচ্ছে। শুধু UI ভিন্ন।
এন্ড্রয়েডের ক্ষেত্রে এই শেয়ার্ড Greetings ক্লাসের greet() ফাংশন এক্সেস করেছি এভাবেঃ
Greeting().greet()
androidApp/src/main/java/.../MainActivity.kt
ফাইল থেকে।
iOS অ্যাপে এক্সেস করেছি এভাবেঃ
let greet = Greeting().greet()
যা রয়েছে iosApp/ContentView.swift ফাইলে।
শেয়ার্ড ফোল্ডারের কোড পরিবর্তন করে দুইটা প্লাটফর্মে রান করে দেখুন। আশা করি ভালো লাগবে। কেমন হয় যদি দুইটা প্ল্যাটফর্মের সব কোডই কটলিন ব্যবহার করে লিখতে পারি? তার জন্য রয়েছে কম্পোজ মাল্টিপ্ল্যাটফর্ম।
iOS কোডবেজ আপনি চাইলে এক্সকোডে ওপেন করে কাজ করতে পারবেন। তবে তার আগে এন্ড্রয়েড স্টুডিওতে অ্যাপ বিল্ড করে নিতে হবে প্রথমবার। তা না হলে ContentView.swift ফাইলের import shared
এ এরর দেখা দিতে পারে। এরপর আমরা বিজনেস লজিক পরিবর্তন করলেও এক্সকোড থেকেই রান করতে পারব।
কম্পোজ মাল্টিপ্ল্যাটফর্ম ব্যবহার করে অ্যাপ তৈরি
কম্পোজ মাল্টিপ্ল্যাটফর্ম ব্যবহার করে অ্যাপ তৈরি করতে চাইলে অ্যান্ড্রয়েড স্টুডিওতে Kotlin Multiplatform প্লাগিন ইন্সটল করা থাকতে হবে। উপরে যা বিস্তারিত লেখা রয়েছে। এরপর Kotlin Multiplatform Wizard এ গিয়ে অ্যাপের একটা নাম দিয়ে প্রজেক্ট তৈরি করে নিতে হবে।
ডাউনলোড করার আনজিপ করে প্রজেক্টটি অ্যান্ড্রয়েড স্টুডিওতে ওপেন করব।
কটলিন মাল্টিফ্লাটফর্মের মতই আমরা অ্যাপ রান করতে পারব। Android, iOS, ডেস্কটপ, ওয়েব যে কোন টার্গেটে।
iOS আউটপুটঃ
এন্ড্রয়েড স্টুডিওতে কোন প্রজেক্ট ওপেন করলে তা Android এর প্রজেক্ট স্ট্র্যাকচারে ওপেন হয়। আমরা Project স্ট্র্যাকচারে পরিবর্তন করে নিব।
কমন কোড পাওয়া যাবে composeApp/commonMain/kotlin/…/ ফোল্ডারে। এখানে App.kt হচ্ছে UI কোড। এবং Greeting হচ্ছে লজিক কোড। নিজের মত করে কোড পরিবর্তন করে রান করে দেখুন। স্বাগতম কম্পোজ মাল্টিপ্ল্যাটফর্মে।
একটা সমস্যা পেয়েছি আমি। সব কিছু ঠিক মতই হচ্ছিল। কিন্তু বিল্ড করতে প্রচুর টাইম নেয়। সামনে ডেভেলপমেন্ট প্রসেস ইম্প্রুভ করে কিনা, তা দেখা বিষয়।