Jetpack হল Google-এর Android লাইব্রেরিগুলির একটি সেট যা ডেভেলপমেন্ট সহজ করে এবং স্থিতিশীল অ্যাপ্লিকেশন তৈরি দ্রুত করে। ViewModel, Room এবং Navigation-এর মতো উপাদানগুলি সাধারণ কাজগুলি সমাধান করে: লাইফসাইকেল ব্যবস্থাপনা, ডেটা সংরক্ষণ এবং নেভিগেশন। Android Developers (2026) অনুসারে, Jetpack 50টিরও বেশি লাইব্রেরি কভার করে, যার প্রতিটি AndroidX-এর মাধ্যমে Android 5.0 (API 21)-এর সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ — একটি সামঞ্জস্য লাইব্রেরি যা Support Library-কে প্রতিস্থাপন করেছে।
মূল বিষয়
Android Jetpack হল Google-এর লাইব্রেরি, টুল এবং আর্কিটেকচার সংক্রান্ত নির্দেশিকার একটি সংগ্রহ, যা 2018 সালে Google I/O-তে উপস্থাপিত হয়েছে। Jetpack Support Library এবং Android Architecture Components-কে প্রতিস্থাপন করেছে, তাদের একটি একক ইকোসিস্টেমে একীভূত করেছে। Jetpack-এর আগে, প্রতিটি Android লাইব্রেরি স্বাধীনভাবে আপডেট হত, যা ভার্সন দ্বন্দ্ব তৈরি করত। Jetpack একটি একক AndroidX শনাক্তকারীর অধীনে ভার্সনগুলিকে সিঙ্ক্রোনাইজ করেছে এবং ছোট প্যাচ সহ স্থিতিশীল মেজর ভার্সনের একটি মডেল চালু করেছে।
Jetpack লাইব্রেরিগুলি চারটি বিভাগে বিভক্ত: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat)। প্রতিটি বিভাগ অ্যাপ্লিকেশনের একটি নির্দিষ্ট স্তরের কাজগুলি সমাধান করে — ডেটা ব্যবস্থাপনা থেকে ব্যবহারকারী ইন্টারফেস পর্যন্ত।
Google তিনটি Jetpack নীতি প্রচার করে: accelerate development (কম boilerplate, বেশি বিজনেস লজিক), eliminate boilerplate (ViewModel ম্যানুয়াল স্টেট সংরক্ষণ দূর করে, Room SQLiteOpenHelper লেখা দূর করে) এবং build with confidence (প্রত্যেক লাইব্রেরি রিলিজের আগে 15,000+ পরীক্ষা পাস করে)। Android Developers (2026) অনুসারে, Jetpack ব্যবহারকারী অ্যাপগুলিতে লাইফসাইকেল-সম্পর্কিত 30% কম ক্র্যাশ হয়।
সমস্ত Jetpack লাইব্রেরি AndroidX শনাক্তকারীর অধীনে বিতরণ করা হয় (androidx.*-এর মতো আর্টিফ্যাক্ট)। AndroidX Support Library (com.android.support.*-এর মতো আর্টিফ্যাক্ট) প্রতিস্থাপন করেছে, মনোলিথিক লাইব্রেরিকে স্বাধীন ভার্সনিং সহ মডিউলার আর্টিফ্যাক্টে বিভক্ত করেছে। AndroidX-এ মাইগ্রেশন gradle.properties-এ android.useAndroidX=true বিকল্পের মাধ্যমে করা হয় — Android Studio স্বয়ংক্রিয়ভাবে ইম্পোর্ট রূপান্তর করে।
ViewModel Jetpack আর্কিটেকচারের কেন্দ্রীয় উপাদান যা UI ডেটা সংরক্ষণ করে। Activity-এর বিপরীতে, যা স্ক্রিন রোটেশনে ধ্বংস হয়, ViewModel মেমোরিতে থাকে। ব্যবহারকারী একটি ফর্ম পূরণ করে, ফোন ঘুরায় — ডেটা হারিয়ে যায় না। ViewModel স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায় যখন LifecycleOwner (Activity বা Fragment) স্থায়ীভাবে তার লাইফসাইকেল শেষ করে (finish)।
class ProfileViewModel : ViewModel() {
private val _userName = MutableLiveData<String>()
val userName: LiveData<String> = _userName
fun loadProfile(userId: String) {
viewModelScope.launch {
val user = repository.getUser(userId)
_userName.value = user.name
}
}
}
@OptIn(ExperimentalLifecycleApi::class)
class MyObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
println("স্ক্রিন চালু হয়েছে")
}
}
LiveData — একটি পর্যবেক্ষণযোগ্য ডেটা কন্টেইনার যা লাইফসাইকেলকে সম্মান করে। যদি স্ক্রিন দৃশ্যমান না হয় (onStop), LiveData আপডেট পাঠায় না — এটি মেমোরি লিক এবং অস্তিত্বহীন Activity আপডেট করার চেষ্টায় ক্র্যাশ প্রতিরোধ করে। Lifecycle — একটি ক্লাস যা বর্তমান অবস্থা (CREATED, STARTED, RESUMED) সংরক্ষণ করে এবং অন্যান্য উপাদানগুলিকে অবস্থা পরিবর্তনে সাবস্ক্রাইব করতে দেয়। একসাথে, ViewModel, LiveData এবং Lifecycle প্রতিক্রিয়াশীল Android আর্কিটেকচারের ভিত্তি গঠন করে।
viewModelScope — ViewModel লাইফসাইকেলের সাথে আবদ্ধ একটি অন্তর্নির্মিত CoroutineScope। এই scope-এ চালু করা সমস্ত coroutine ViewModel পরিষ্কার হলে স্বয়ংক্রিয়ভাবে বাতিল হয়। এটি প্রতিটি ViewModel-এ Disposable এবং CompositeDisposable-এর ম্যানুয়াল ব্যবস্থাপনা দূর করে। viewModelScope-এর সাথে কাজ করার জন্য androidx.lifecycle:lifecycle-viewmodel-ktx নির্ভরতা প্রয়োজন।
Room একটি Jetpack ORM লাইব্রেরি যা SQLite-এর উপর একটি অ্যাবস্ট্র্যাক্ট স্তর প্রদান করে। কাঁচা SQL কোয়েরি লেখার এবং ম্যানুয়ালি Cursor-কে অবজেক্টে রূপান্তর করার পরিবর্তে, ডেভেলপার একটি Entity (টেবিল), DAO (ডেটা অ্যাক্সেস অবজেক্ট) এবং Database (প্রবেশ বিন্দু) ঘোষণা করে। Room @Query অ্যানোটেশনের মাধ্যমে কম্পাইল টাইমে SQL কোয়েরি যাচাই করে — যদি টেবিল বা কলাম বিদ্যমান না থাকে, তবে বিল্ড একটি পরিষ্কার ত্রুটি সহ ব্যর্থ হয়।
@Entity
data class User(
@PrimaryKey val id: String,
val name: String,
val email: String
)
@Dao
interface UserDao {
@Query("SELECT * FROM User WHERE id = :userId")
suspend fun getUser(userId: String): User?
@Insert
suspend fun insertUser(user: User)
}
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
Entity User তিনটি কলাম সহ একটি টেবিল বর্ণনা করে। DAO coroutine-এর সাথে কাজ করার জন্য suspend ফাংশন ঘোষণা করে — কোয়েরি স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ড থ্রেডে নির্বাহিত হয়। Room @Migration অ্যানোটেশনের মাধ্যমে মাইগ্রেশন সমর্থন করে: ডেভেলপার ভার্সনের মধ্যে স্থানান্তরের জন্য SQL স্ক্রিপ্ট বর্ণনা করে, এবং Room এটি ডেটা ক্ষতি ছাড়াই নির্বাহ করে। মাইগ্রেশনের অভাবে, Room IllegalStateException নিক্ষেপ করে — এটি স্কিমা আপডেট করার সময় প্রকল্পগুলিকে দুর্ঘটনাজনিত ডেটা ক্ষতি থেকে রক্ষা করে।
Room শুধুমাত্র আদিম ধরন এবং তাদের র্যাপার সংরক্ষণ করে। তালিকা, Date বা কাস্টম অবজেক্ট সংরক্ষণের জন্য @TypeConverter ব্যবহার করা হয় — একটি স্ট্যাটিক মেথড যা একটি টাইপকে String (JSON) বা Long (timestamp)-এ রূপান্তর করে। টেবিলের মধ্যে সম্পর্ক @Relation অ্যানোটেশন এবং কার্যকর join কোয়েরির জন্য @Transaction সহ সহায়ক POJO ক্লাসের মাধ্যমে মডেল করা হয়।
Navigation Component — স্ক্রিনের মধ্যে ট্রানজিশন পরিচালনার জন্য একটি Jetpack লাইব্রেরি। ম্যানুয়ালি FragmentTransaction কল করার পরিবর্তে, ডেভেলপার একটি নেভিগেশন গ্রাফ (গন্তব্য নোড সহ XML ফাইল) তৈরি করে এবং সিস্টেম টাইপ-সেফ ট্রানজিশন মেথড সহ একটি Directions ক্লাস জেনারেট করে। Navigation Component ব্যাক স্ট্যাক, ডিপ লিংক এবং স্ক্রিনের মধ্যে আর্গুমেন্ট পাসিংয়ের সঠিক পরিচালনা নিশ্চিত করে।
// nav_graph.xml
//
// android:name=".ProfileFragment">
//
// android:defaultValue="-1"
// app:argType="integer" />
//
// ফ্র্যাগমেন্ট কোডে:
class ProfileFragment : Fragment() {
private val args: ProfileFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadProfile(args.userId)
}
}
userId আর্গুমেন্টগুলি টাইপ (integer) এবং ডিফল্ট মান সহ নেভিগেশন গ্রাফে পাস করা হয়। ProfileFragmentArgs ক্লাস স্বয়ংক্রিয়ভাবে Navigation Safe Args প্লাগইন দ্বারা জেনারেট হয় — এতে সঠিক Kotlin টাইপ সহ সমস্ত আর্গুমেন্ট থাকে। ডিপ লিংক গ্রাফে কনফিগার করা হয়: app:deepLink="app://profile/{userId}"। Navigation Component নিজেই URL পার্স করে এবং ব্যাক স্ট্যাক তৈরি করে যেন ব্যবহারকারী ইন্টারফেসের মাধ্যমে নেভিগেট করেছে।
Navigation Component NavController-এর মাধ্যমে BottomNavigationView-এর সাথে সংহত হয়: প্রতিটি মেনু আইটেম গ্রাফের একটি গন্তব্যের সাথে সংযুক্ত। ট্যাবের মধ্যে স্যুইচ করা ফ্র্যাগমেন্ট পুনঃনির্মাণ করে না — Navigation Component NavBackStackEntry-এর মাধ্যমে অবস্থা সংরক্ষণ করে। শর্তসাপেক্ষ নেভিগেশনের জন্য (প্রমাণিত না হলে লগইন দেখান), onCreate-এ যাচাই সহ navController.navigate(condition) ব্যবহার করা হয়।
AndroidX হল Support Library-এর পুনঃডিজাইন করা আর্কিটেকচার যেখানে প্রতিটি লাইব্রেরি একটি স্বাধীন ভার্সন সহ নিজস্ব আর্টিফ্যাক্ট পেয়েছে। একটি একক com.android.support:appcompat-v7:28.0.0-এর পরিবর্তে, AndroidX androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 ইত্যাদি প্রদান করে। এটি সেই সমস্যা দূর করেছে যেখানে বিভিন্ন নির্ভরতা Support Library-এর বিভিন্ন ভার্সন টেনে আনত, দ্বন্দ্ব সৃষ্টি করত।
AndroidX-এ মাইগ্রেশন Android Studio 3.2+-এ মেনু Refactor → Migrate to AndroidX-এর মাধ্যমে স্বয়ংক্রিয়ভাবে করা হয়। স্টুডিও Java/Kotlin ফাইল, ম্যানিফেস্ট এবং রিসোর্সে সমস্ত ইম্পোর্ট প্রতিস্থাপন করে। পিছনের দিকের সামঞ্জস্য AndroidX-এর প্রধান সুবিধা: লাইব্রেরিগুলি Android 5.0 (API 21) এবং তার উপরে কাজ করে, Google Play Console (2025) অনুসারে সক্রিয় ডিভাইসের 97% কভার করে।
সবচেয়ে বেশি ব্যবহৃত আর্টিফ্যাক্ট: appcompat (পুরানো API-তে ডার্ক থিম, Material Design), recyclerview (ViewHolder সহ অভিযোজিত তালিকা), constraintlayout (সমতল শ্রেণিবিন্যাস সহ নমনীয় কন্টেইনার), cardview (Material Design কার্ড), preference (Material শৈলী সহ সেটিংস স্ক্রিন)। প্রতিটি আর্টিফ্যাক্ট স্বাধীনভাবে ভার্সন করা হয়, পুরো প্যাকেজ আপডেট না করেই ফিক্স সরবরাহ ত্বরান্বিত করে।
Architecture এবং AndroidX ছাড়াও, Jetpack সাধারণ মোবাইল ডেভেলপমেন্ট কাজের জন্য অনেক বিশেষায়িত লাইব্রেরি অন্তর্ভুক্ত করে। WorkManager — গ্যারান্টিযুক্ত নির্বাহ সহ ব্যাকগ্রাউন্ড কাজের জন্য (সিঙ্ক্রোনাইজেশন, লগ আপলোড), পর্যায়ক্রমিক এবং বিলম্বিত কাজের পাশাপাশি নেটওয়ার্ক এবং ব্যাটারি সীমাবদ্ধতা সমর্থন করে। DataStore — coroutine-ভিত্তিক SharedPreferences-এর একটি বিকল্প, টাইপযুক্ত বৈশিষ্ট্য (Preferences DataStore) এবং Protocol Buffers (Proto DataStore) সমর্থন করে।
প্রত্যেক লাইব্রেরির নিজস্ব ন্যূনতম SDK এবং আর্টিফ্যাক্ট রয়েছে। Google বছরে একবার মেজর ভার্সন প্রকাশ করে (Android রিলিজের সাথে মিল রেখে) এবং ত্রৈমাসিক সুরক্ষা প্যাচ। সুপারিশ — APK আকার বাড়ানো এড়াতে শুধুমাত্র প্রয়োজনীয় লাইব্রেরি অন্তর্ভুক্ত করুন। সম্পূর্ণ Jetpack সংগ্রহ (সমস্ত আর্টিফ্যাক্ট) 20 MB-এর বেশি, কিন্তু একটি সাধারণ অ্যাপ 5–7টি লাইব্রেরি ব্যবহার করে, APK-তে 3–5 MB যোগ করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
হ্যাঁ, Google 2019 সালে Support Library-এর সমর্থন বন্ধ করেছে। সমস্ত নতুন Jetpack লাইব্রেরি এবং Google Play Services-এর AndroidX প্রয়োজন। মাইগ্রেশন Android Studio-এর মাধ্যমে 30–60 মিনিটে করা হয়।
Jetpack Java-এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ। তবে, অনেক বৈশিষ্ট্য (viewModelScope, coroutine, Compose) শুধুমাত্র Kotlin-এ উপলব্ধ। Google নতুন প্রকল্পের জন্য Kotlin সুপারিশ করে।
ViewModel মেমোরিতে অবজেক্ট সংরক্ষণ করে এবং রোটেশন সহ্য করে। onSaveInstanceState শুধুমাত্র সিরিয়ালাইজযোগ্য প্রিমিটিভ (Bundle)-এর জন্য উপযুক্ত। প্রক্রিয়া নিহত হলে ViewModel সংরক্ষিত হয় না — এর জন্য SavedStateHandle প্রয়োজন।
WorkManager — এমন কাজের জন্য যা অ্যাপ বন্ধ হওয়ার পরেও নির্বাহ হতে হবে: সিঙ্ক্রোনাইজেশন, লগ আপলোড, বিশ্লেষণ পাঠানো। Coroutine — স্ক্রিনের সাথে আবদ্ধ কাজের জন্য।
SharedPreferences ইম্পোর্ট DataStoredataStore.data.first() (suspend) দিয়ে পড়া, dataStore.edit { ... } দিয়ে লেখা। DataStore অ্যাসিঙ্ক্রোনাস এবং ANR থেকে সুরক্ষিত।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন