Jetpack — এটি কী, আর্কিটেকচার উপাদান

লেখক: IT Sectr প্রকাশিত: 2026-05-01 পড়ার সময়: 9 মিনিট

Jetpack হল Google-এর Android লাইব্রেরিগুলির একটি সেট যা ডেভেলপমেন্ট সহজ করে এবং স্থিতিশীল অ্যাপ্লিকেশন তৈরি দ্রুত করে। ViewModel, Room এবং Navigation-এর মতো উপাদানগুলি সাধারণ কাজগুলি সমাধান করে: লাইফসাইকেল ব্যবস্থাপনা, ডেটা সংরক্ষণ এবং নেভিগেশন। Android Developers (2026) অনুসারে, Jetpack 50টিরও বেশি লাইব্রেরি কভার করে, যার প্রতিটি AndroidX-এর মাধ্যমে Android 5.0 (API 21)-এর সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ — একটি সামঞ্জস্য লাইব্রেরি যা Support Library-কে প্রতিস্থাপন করেছে।

মূল বিষয়

  • Android Jetpack — 50+ লাইব্রেরির একটি সেট যা Android অ্যাপ ডেভেলপমেন্ট ত্বরান্বিত করে এবং AndroidX-এর মাধ্যমে পিছনের দিকের সামঞ্জস্য নিশ্চিত করে।
  • ViewModel স্ক্রিন রোটেশন সহ্য করে এবং Activity পুনঃনির্মাণের সময় ডেটা সংরক্ষণ করে, ব্যবহারকারীর ইনপুট হারানো রোধ করে।
  • Room — SQLite-এর উপর ORM স্তর যা কম্পাইল-টাইম SQL কোয়েরি যাচাইকরণ এবং coroutine সমর্থন সহ।
  • Navigation Component টাইপ-সেফ আর্গুমেন্ট সহ নেভিগেশন গ্রাফের মাধ্যমে স্ক্রিনের মধ্যে ট্রানজিশন পরিচালনা করে।
  • Lifecycle কন্ট্রোলারগুলিতে boilerplate কোড ছাড়াই Activity/Fragment লাইফসাইকেল ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে দেয়।

Android Jetpack কী?

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)। প্রতিটি বিভাগ অ্যাপ্লিকেশনের একটি নির্দিষ্ট স্তরের কাজগুলি সমাধান করে — ডেটা ব্যবস্থাপনা থেকে ব্যবহারকারী ইন্টারফেস পর্যন্ত।

Jetpack দর্শন

Google তিনটি Jetpack নীতি প্রচার করে: accelerate development (কম boilerplate, বেশি বিজনেস লজিক), eliminate boilerplate (ViewModel ম্যানুয়াল স্টেট সংরক্ষণ দূর করে, Room SQLiteOpenHelper লেখা দূর করে) এবং build with confidence (প্রত্যেক লাইব্রেরি রিলিজের আগে 15,000+ পরীক্ষা পাস করে)। Android Developers (2026) অনুসারে, Jetpack ব্যবহারকারী অ্যাপগুলিতে লাইফসাইকেল-সম্পর্কিত 30% কম ক্র্যাশ হয়।

AndroidX ভিত্তি হিসাবে

সমস্ত Jetpack লাইব্রেরি AndroidX শনাক্তকারীর অধীনে বিতরণ করা হয় (androidx.*-এর মতো আর্টিফ্যাক্ট)। AndroidX Support Library (com.android.support.*-এর মতো আর্টিফ্যাক্ট) প্রতিস্থাপন করেছে, মনোলিথিক লাইব্রেরিকে স্বাধীন ভার্সনিং সহ মডিউলার আর্টিফ্যাক্টে বিভক্ত করেছে। AndroidX-এ মাইগ্রেশন gradle.properties-এ android.useAndroidX=true বিকল্পের মাধ্যমে করা হয় — Android Studio স্বয়ংক্রিয়ভাবে ইম্পোর্ট রূপান্তর করে।

আর্কিটেকচার উপাদান: ViewModel, Lifecycle, LiveData

ViewModel Jetpack আর্কিটেকচারের কেন্দ্রীয় উপাদান যা UI ডেটা সংরক্ষণ করে। Activity-এর বিপরীতে, যা স্ক্রিন রোটেশনে ধ্বংস হয়, ViewModel মেমোরিতে থাকে। ব্যবহারকারী একটি ফর্ম পূরণ করে, ফোন ঘুরায় — ডেটা হারিয়ে যায় না। ViewModel স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায় যখন LifecycleOwner (Activity বা Fragment) স্থায়ীভাবে তার লাইফসাইকেল শেষ করে (finish)।

kotlin
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 এবং coroutine

viewModelScope — ViewModel লাইফসাইকেলের সাথে আবদ্ধ একটি অন্তর্নির্মিত CoroutineScope। এই scope-এ চালু করা সমস্ত coroutine ViewModel পরিষ্কার হলে স্বয়ংক্রিয়ভাবে বাতিল হয়। এটি প্রতিটি ViewModel-এ Disposable এবং CompositeDisposable-এর ম্যানুয়াল ব্যবস্থাপনা দূর করে। viewModelScope-এর সাথে কাজ করার জন্য androidx.lifecycle:lifecycle-viewmodel-ktx নির্ভরতা প্রয়োজন।

Room: Android-এ ডেটাবেস নিয়ে কাজ করা

Room একটি Jetpack ORM লাইব্রেরি যা SQLite-এর উপর একটি অ্যাবস্ট্র্যাক্ট স্তর প্রদান করে। কাঁচা SQL কোয়েরি লেখার এবং ম্যানুয়ালি Cursor-কে অবজেক্টে রূপান্তর করার পরিবর্তে, ডেভেলপার একটি Entity (টেবিল), DAO (ডেটা অ্যাক্সেস অবজেক্ট) এবং Database (প্রবেশ বিন্দু) ঘোষণা করে। Room @Query অ্যানোটেশনের মাধ্যমে কম্পাইল টাইমে SQL কোয়েরি যাচাই করে — যদি টেবিল বা কলাম বিদ্যমান না থাকে, তবে বিল্ড একটি পরিষ্কার ত্রুটি সহ ব্যর্থ হয়।

kotlin
@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 নিক্ষেপ করে — এটি স্কিমা আপডেট করার সময় প্রকল্পগুলিকে দুর্ঘটনাজনিত ডেটা ক্ষতি থেকে রক্ষা করে।

TypeConverters এবং সম্পর্ক

Room শুধুমাত্র আদিম ধরন এবং তাদের র্যাপার সংরক্ষণ করে। তালিকা, Date বা কাস্টম অবজেক্ট সংরক্ষণের জন্য @TypeConverter ব্যবহার করা হয় — একটি স্ট্যাটিক মেথড যা একটি টাইপকে String (JSON) বা Long (timestamp)-এ রূপান্তর করে। টেবিলের মধ্যে সম্পর্ক @Relation অ্যানোটেশন এবং কার্যকর join কোয়েরির জন্য @Transaction সহ সহায়ক POJO ক্লাসের মাধ্যমে মডেল করা হয়।

Navigation Component — স্ক্রিনের মধ্যে ট্রানজিশন পরিচালনার জন্য একটি Jetpack লাইব্রেরি। ম্যানুয়ালি FragmentTransaction কল করার পরিবর্তে, ডেভেলপার একটি নেভিগেশন গ্রাফ (গন্তব্য নোড সহ XML ফাইল) তৈরি করে এবং সিস্টেম টাইপ-সেফ ট্রানজিশন মেথড সহ একটি Directions ক্লাস জেনারেট করে। Navigation Component ব্যাক স্ট্যাক, ডিপ লিংক এবং স্ক্রিনের মধ্যে আর্গুমেন্ট পাসিংয়ের সঠিক পরিচালনা নিশ্চিত করে।

kotlin
// 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

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% কভার করে।

প্রধান AndroidX আর্টিফ্যাক্ট

সবচেয়ে বেশি ব্যবহৃত আর্টিফ্যাক্ট: appcompat (পুরানো API-তে ডার্ক থিম, Material Design), recyclerview (ViewHolder সহ অভিযোজিত তালিকা), constraintlayout (সমতল শ্রেণিবিন্যাস সহ নমনীয় কন্টেইনার), cardview (Material Design কার্ড), preference (Material শৈলী সহ সেটিংস স্ক্রিন)। প্রতিটি আর্টিফ্যাক্ট স্বাধীনভাবে ভার্সন করা হয়, পুরো প্যাকেজ আপডেট না করেই ফিক্স সরবরাহ ত্বরান্বিত করে।

অন্যান্য গুরুত্বপূর্ণ Jetpack লাইব্রেরি

Architecture এবং AndroidX ছাড়াও, Jetpack সাধারণ মোবাইল ডেভেলপমেন্ট কাজের জন্য অনেক বিশেষায়িত লাইব্রেরি অন্তর্ভুক্ত করে। WorkManager — গ্যারান্টিযুক্ত নির্বাহ সহ ব্যাকগ্রাউন্ড কাজের জন্য (সিঙ্ক্রোনাইজেশন, লগ আপলোড), পর্যায়ক্রমিক এবং বিলম্বিত কাজের পাশাপাশি নেটওয়ার্ক এবং ব্যাটারি সীমাবদ্ধতা সমর্থন করে। DataStore — coroutine-ভিত্তিক SharedPreferences-এর একটি বিকল্প, টাইপযুক্ত বৈশিষ্ট্য (Preferences DataStore) এবং Protocol Buffers (Proto DataStore) সমর্থন করে।

  • Hilt — Dagger-ভিত্তিক DI ফ্রেমওয়ার্ক যা @HiltViewModel, @Inject, @Module অ্যানোটেশনের মাধ্যমে নির্ভরতা ইনজেকশন সহজ করে। ViewModel এবং Navigation-এর সাথে অন্তর্নির্মিত সংহতি।
  • Paging 3 — RemoteMediator (নেটওয়ার্ক + ক্যাশে), StateFlow এবং Compose-এর সমর্থন সহ নেটওয়ার্ক/DB থেকে পৃষ্ঠাভিত্তিক ডেটা লোডিংয়ের জন্য লাইব্রেরি।
  • CameraX — ক্যামেরার সাথে কাজ করার জন্য API, একটি একীভূত CameraController ইন্টারফেসের মাধ্যমে প্রস্তুতকারকের পার্থক্য (Samsung, Xiaomi, Honor) বিমূর্ত করে।
  • Security Crypto — Android Keystore-এ মাস্টার কী সহ AES-256-ভিত্তিক EncryptedSharedPreferences এবং EncryptedFile-এর মাধ্যমে ডেটা এনক্রিপশন।

প্রত্যেক লাইব্রেরির নিজস্ব ন্যূনতম SDK এবং আর্টিফ্যাক্ট রয়েছে। Google বছরে একবার মেজর ভার্সন প্রকাশ করে (Android রিলিজের সাথে মিল রেখে) এবং ত্রৈমাসিক সুরক্ষা প্যাচ। সুপারিশ — APK আকার বাড়ানো এড়াতে শুধুমাত্র প্রয়োজনীয় লাইব্রেরি অন্তর্ভুক্ত করুন। সম্পূর্ণ Jetpack সংগ্রহ (সমস্ত আর্টিফ্যাক্ট) 20 MB-এর বেশি, কিন্তু একটি সাধারণ অ্যাপ 5–7টি লাইব্রেরি ব্যবহার করে, APK-তে 3–5 MB যোগ করে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

আমার কি Support Library থেকে AndroidX-এ মাইগ্রেট করা দরকার?

হ্যাঁ, Google 2019 সালে Support Library-এর সমর্থন বন্ধ করেছে। সমস্ত নতুন Jetpack লাইব্রেরি এবং Google Play Services-এর AndroidX প্রয়োজন। মাইগ্রেশন Android Studio-এর মাধ্যমে 30–60 মিনিটে করা হয়।

Jetpack কি Java-এর সাথে নাকি শুধুমাত্র Kotlin-এর সাথে ব্যবহার করা যেতে পারে?

Jetpack Java-এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ। তবে, অনেক বৈশিষ্ট্য (viewModelScope, coroutine, Compose) শুধুমাত্র Kotlin-এ উপলব্ধ। Google নতুন প্রকল্পের জন্য Kotlin সুপারিশ করে।

ViewModel কীভাবে onSaveInstanceState থেকে আলাদা?

ViewModel মেমোরিতে অবজেক্ট সংরক্ষণ করে এবং রোটেশন সহ্য করে। onSaveInstanceState শুধুমাত্র সিরিয়ালাইজযোগ্য প্রিমিটিভ (Bundle)-এর জন্য উপযুক্ত। প্রক্রিয়া নিহত হলে ViewModel সংরক্ষিত হয় না — এর জন্য SavedStateHandle প্রয়োজন।

কখন coroutine-এর পরিবর্তে WorkManager ব্যবহার করবেন?

WorkManager — এমন কাজের জন্য যা অ্যাপ বন্ধ হওয়ার পরেও নির্বাহ হতে হবে: সিঙ্ক্রোনাইজেশন, লগ আপলোড, বিশ্লেষণ পাঠানো। Coroutine — স্ক্রিনের সাথে আবদ্ধ কাজের জন্য।

কীভাবে SharedPreferences থেকে DataStore-এ মাইগ্রেট করবেন?

SharedPreferences ইম্পোর্ট DataStore দিয়ে প্রতিস্থাপন করুন। dataStore.data.first() (suspend) দিয়ে পড়া, dataStore.edit { ... } দিয়ে লেখা। DataStore অ্যাসিঙ্ক্রোনাস এবং ANR থেকে সুরক্ষিত।

সারসংক্ষেপ

  • Android Jetpack — Android ডেভেলপমেন্টের জন্য 50+ লাইব্রেরির সেট, API 21 পর্যন্ত পিছনের দিকের সামঞ্জস্য সহ AndroidX-এর অধীনে একীভূত।
  • ViewModel স্ক্রিন রোটেশন সহ্য করে এবং UI ডেটা সংরক্ষণ করে, যখন Lifecycle উপাদানগুলিকে Activity/Fragment অবস্থা পরিবর্তন সম্পর্কে জানায়।
  • Room — SQLite-এর উপর টাইপ-সেফ ORM যার কম্পাইল-টাইম কোয়েরি যাচাইকরণ, মাইগ্রেশন এবং coroutine সমর্থন রয়েছে।
  • Navigation Component টাইপ-সেফ আর্গুমেন্ট এবং স্বয়ংক্রিয় ডিপ লিংক সহ গ্রাফের মাধ্যমে ট্রানজিশন পরিচালনা করে।
  • WorkManager অ্যাপ বন্ধ হওয়ার পরেও ব্যাকগ্রাউন্ড কাজ নির্বাহের গ্যারান্টি দেয়; DataStore SharedPreferences প্রতিস্থাপন করে।
  • Jetpack চারটি বিভাগে বিভক্ত: Architecture, UI, Behavior, Foundation — প্রতিটি তার নিজস্ব অ্যাপ্লিকেশন স্তর কভার করে।
  • Jetpack ব্যবহারকারী অ্যাপগুলিতে লাইফসাইকেল-সম্পর্কিত 30% কম ক্র্যাশ হয় এবং প্রস্তুত আর্কিটেকচার সমাধানের কারণে দ্রুত ডেভেলপ হয়।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন