Jetpack — چیست، اجزای معماری

نویسنده: IT Sectr منتشر شده: 2026-05-01 زمان مطالعه: 9 دقیقه

Jetpack — مجموعه‌ای از کتابخانه‌های Android از Google است که توسعه را ساده‌تر و ایجاد برنامه‌های پایدار را سریع‌تر می‌کند. اجزایی مانند ViewModel، Room و Navigation وظایف معمولی را حل می‌کنند: مدیریت چرخه حیات، ذخیره‌سازی داده‌ها و ناوبری. بر اساس Android Developers (2026)، Jetpack بیش از ۵۰ کتابخانه را پوشش می‌دهد که هر کدام از طریق AndroidX — کتابخانه سازگاری که جایگزین Support Library شد — با Android 5.0 (API 21) سازگار هستند.

نکات اصلی

  • Android Jetpack — مجموعه‌ای از ۵۰+ کتابخانه که توسعه برنامه‌های Android را سرعت می‌بخشد و از طریق AndroidX سازگاری معکوس را تضمین می‌کند.
  • ViewModel از چرخش صفحه جان سالم به در می‌برد و داده‌ها را هنگام بازسازی Activity حفظ می‌کند و از از دست رفتن ورودی کاربر جلوگیری می‌نماید.
  • Room — لایه ORM بر روی SQLite با بررسی کوئری‌های SQL در زمان کامپایل و پشتیبانی از کوروتین‌ها.
  • Navigation Component انتقال بین صفحه‌ها را از طریق گراف‌های ناوبری با آرگومان‌های type-safe مدیریت می‌کند.
  • Lifecycle امکان واکنش به رویدادهای چرخه حیات Activity/Fragment را بدون کدهای boilerplate در کنترلرها فراهم می‌کند.

Android Jetpack چیست؟

Android Jetpack — مجموعه‌ای از کتابخانه‌ها، ابزارها و توصیه‌های معماری از Google است که در سال ۲۰۱۸ در 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 (هر کتابخانه قبل از انتشار ۱۵+ هزار تست را پشت سر می‌گذارد). بر اساس Android Developers (2026)، برنامه‌های مبتنی بر Jetpack ۳۰٪ crash کمتری مرتبط با چرخه حیات دارند.

AndroidX به عنوان پایه

همه کتابخانه‌های Jetpack تحت شناسه AndroidX توزیع می‌شوند (آرتیفکت‌هایی به شکل androidx.*). AndroidX جایگزین Support Library (آرتیفکت‌های com.android.support.*) شد و کتابخانه یکپارچه را به آرتیفکت‌های ماژولار با نسخه‌گذاری مستقل تقسیم کرد. مهاجرت به AndroidX از طریق گزینه android.useAndroidX=true در gradle.properties انجام می‌شود — Android Studio به طور خودکار importها را تبدیل می‌کند.

اجزای معماری: 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 به‌روزرسانی ارسال نمی‌کند — این کار از نشت حافظه و crash هنگام تلاش برای به‌روزرسانی Activity ناموجود جلوگیری می‌کند. Lifecycle — کلاسی که وضعیت فعلی را ذخیره می‌کند (CREATED، STARTED، RESUMED) و به سایر مؤلفه‌ها امکان اشتراک در تغییرات وضعیت را می‌دهد. ViewModel، LiveData و Lifecycle با هم پایه معماری واکنشی Android را تشکیل می‌دهند.

ViewModelScope و کوروتین‌ها

viewModelScope — CoroutineScope داخلی متصل به چرخه حیات ViewModel. همه کوروتین‌هایی که در این scope اجرا می‌شوند، هنگام پاک شدن ViewModel به طور خودکار لغو می‌شوند. این کار مدیریت دستی Disposable و CompositeDisposable را در هر ViewModel حذف می‌کند. برای کار با viewModelScope به وابستگی androidx.lifecycle:lifecycle-viewmodel-ktx نیاز است.

Room: کار با پایگاه داده در Android

Room — کتابخانه ORM از Jetpack است که لایه انتزاعی بر روی SQLite ارائه می‌دهد. به جای نوشتن کوئری‌های خام SQL و تبدیل دستی Cursor به اشیاء، توسعه‌دهنده Entity (جدول)، DAO (Data Access Object) و Database (نقطه ورود) را اعلام می‌کند. Room کوئری‌های SQL را در زمان کامپایل از طریق annotation @Query بررسی می‌کند — اگر جداول یا ستون‌ها وجود نداشته باشند، build با خطای قابل فهم متوقف می‌شود.

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 توابع suspend را برای کار با کوروتین‌ها اعلام می‌کند — کوئری به طور خودکار در نخ پس‌زمینه اجرا می‌شود. Room از مهاجرت از طریق annotation @Migration پشتیبانی می‌کند: توسعه‌دهنده اسکریپت SQL انتقال بین نسخه‌ها را توصیف می‌کند و Room آن را بدون از دست دادن داده اجرا می‌کند. در صورت عدم وجود مهاجرت، Room IllegalStateException پرتاب می‌کند — به این ترتیب پروژه‌ها از از دست دادن تصادفی داده هنگام به‌روزرسانی طرح محافظت می‌شوند.

TypeConverters و روابط

Room فقط انواع اولیه و wrapperهای آنها را ذخیره می‌کند. برای ذخیره لیست‌ها، Date یا اشیاء سفارشی از @TypeConverter استفاده می‌شود — متد استاتیکی که نوع را به String (JSON) یا Long (timestamp) تبدیل می‌کند. روابط بین جداول از طریق اشیاء تو در تو با annotation @Relation و کلاس‌های POJO کمکی با @Transaction برای کوئری‌های join کارآمد مدل‌سازی می‌شوند.

Navigation Component — کتابخانه Jetpack برای مدیریت انتقال بین صفحه‌ها. به جای فراخوانی دستی FragmentTransaction، توسعه‌دهنده یک گراف ناوبری ایجاد می‌کند (فایل XML با گره‌های مقصد) و سیستم کلاس Directions را با متدهای انتقال type-safe تولید می‌کند. Navigation Component عملکرد صحیح back stack، deep links و انتقال آرگومان بین صفحه‌ها را تضمین می‌کند.

kotlin
// nav_graph.xml
// <fragment android:id="@+id/profileFragment"
//     android:name=".ProfileFragment">
//     <argument android:name="userId"
//         android:defaultValue="-1"
//         app:argType="integer" />
// </fragment>

// در کد قطعه:
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 را تجزیه می‌کند و back stack را طوری ایجاد می‌کند که انگار کاربر از طریق رابط عبور کرده است.

Bottom Navigation و Conditional Navigation

Navigation Component از طریق NavController با BottomNavigationView ادغام می‌شود: هر آیتم منو به یک مقصد در گراف متصل می‌شود. انتقال بین تب‌ها fragment را بازسازی نمی‌کند — Navigation Component وضعیت را از طریق NavBackStackEntry حفظ می‌کند. برای ناوبری شرطی (نمایش ورود در صورت عدم احراز هویت) از navController.navigate(condition) با بررسی در onCreate استفاده می‌شود.

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 انجام می‌شود. Studio همه importها را در فایل‌های Java/Kotlin، manifestها و منابع جایگزین می‌کند. سازگاری معکوس — مزیت اصلی AndroidX: کتابخانه‌ها روی Android 5.0 (API 21) و بالاتر کار می‌کنند و طبق Google Play Console (2025) ۹۷٪ دستگاه‌های فعال را پوشش می‌دهند.

آرتیفکت‌های اصلی AndroidX

پراستفاده‌ترین آرتیفکت‌ها: appcompat (حالت تاریک، Material Design در APIهای قدیمی)، recyclerview (لیست‌های تطبیقی با ViewHolder)، constraintlayout (کانتینر انعطاف‌پذیر با سلسله‌مراتب تخت)، cardview (کارت‌های Material Design)، preference (صفحه تنظیمات با سبک Material). هر آرتیفکت به طور مستقل نسخه‌گذاری می‌شود و دریافت اصلاحات را بدون به‌روزرسانی کل بسته سرعت می‌بخشد.

سایر کتابخانه‌های مهم Jetpack

علاوه بر Architecture و AndroidX، Jetpack شامل کتابخانه‌های تخصصی بسیاری برای وظایف معمول توسعه موبایل است. WorkManager — برای وظایف پس‌زمینه با اجرای تضمینی (همگام‌سازی، بارگذاری لاگ‌ها)، از وظایف دوره‌ای و تأخیردار و همچنین محدودیت‌های شبکه و باتری پشتیبانی می‌کند. DataStore — جایگزین SharedPreferences بر اساس کوروتین‌ها که از ویژگی‌های تایپ‌شده (Preferences DataStore) و Protocol Buffers (Proto DataStore) پشتیبانی می‌کند.

  • Hilt — فریمورک DI مبتنی بر Dagger که تزریق وابستگی را از طریق annotation‌های @HiltViewModel، @Inject، @Module ساده می‌کند. یکپارچگی داخلی با ViewModel و Navigation.
  • Paging 3 — کتابخانه بارگذاری صفحه‌ای داده از شبکه/پایگاه داده با پشتیبانی RemoteMediator (شبکه + کش)، StateFlow و Compose.
  • CameraX — API برای کار با دوربین که تفاوت‌های تولیدکنندگان (Samsung، Xiaomi، Honor) را از طریق یک رابط واحد CameraController انتزاع می‌کند.
  • Security Crypto — رمزگذاری داده‌ها از طریق EncryptedSharedPreferences و EncryptedFile مبتنی بر AES-256 با کلید اصلی در Android Keystore.

هر کتابخانه SDK حداقل و آرتیفکت مخصوص خود را دارد. Google سالی یک بار (همزمان با انتشار Android) نسخه‌های اصلی و هر سه ماه یک بار پچ‌های امنیتی منتشر می‌کند. توصیه — فقط کتابخانه‌های ضروری را اضافه کنید تا اندازه APK افزایش نیابد. Jetpack به طور کامل (همه آرتیفکت‌ها) بیش از ۲۰ مگابایت وزن دارد، اما یک برنامه معمولی از ۵–۷ کتابخانه استفاده می‌کند و ۳–۵ مگابایت به APK اضافه می‌کند.

سوالات متداول

آیا مهاجرت از Support Library به AndroidX ضروری است؟

بله، Google پشتیبانی از Support Library را در سال ۲۰۱۹ متوقف کرد. همه کتابخانه‌های جدید Jetpack و Google Play Services به AndroidX نیاز دارند. مهاجرت طی ۳۰–۶۰ دقیقه از طریق Android Studio انجام می‌شود.

آیا می‌توان از Jetpack با Java استفاده کرد یا فقط با Kotlin؟

Jetpack کاملاً با Java سازگار است. با این حال بسیاری از ویژگی‌ها (viewModelScope، کوروتین‌ها، Compose) فقط در Kotlin در دسترس هستند. Google برای پروژه‌های جدید Kotlin را توصیه می‌کند.

تفاوت ViewModel با onSaveInstanceState چیست؟

ViewModel اشیاء را در حافظه ذخیره می‌کند و از چرخش جان سالم به در می‌برد. onSaveInstanceState فقط برای اولیه‌های قابل سریال‌سازی (Bundle) مناسب است. ViewModel هنگام کشته شدن فرآیند حفظ نمی‌شود — برای این کار به SavedStateHandle نیاز است.

چه زمانی به جای کوروتین از WorkManager استفاده کنیم؟

WorkManager — برای وظایفی که حتی پس از بسته شدن برنامه باید اجرا شوند: همگام‌سازی، بارگذاری لاگ‌ها، ارسال آمار. کوروتین‌ها — برای وظایف متصل به صفحه.

چگونه از SharedPreferences به DataStore مهاجرت کنیم؟

importهای SharedPreferences را با DataStore<Preferences> جایگزین کنید. خواندن از طریق dataStore.data.first() (suspend)، نوشتن از طریق dataStore.edit { ... }. DataStore ناهمزمان است و از ANR محافظت می‌کند.

خلاصه

  • Android Jetpack — مجموعه‌ای از ۵۰+ کتابخانه برای توسعه Android که تحت AndroidX با سازگاری معکوس تا API 21 متحد شده‌اند.
  • ViewModel از چرخش صفحه جان سالم به در می‌برد و داده‌های UI را حفظ می‌کند، و Lifecycle مؤلفه‌ها را از تغییر وضعیت Activity/Fragment مطلع می‌سازد.
  • Room — ORM type-safe بر روی SQLite با بررسی کامپایل کوئری‌ها، مهاجرت‌ها و پشتیبانی از کوروتین.
  • Navigation Component انتقال را از طریق گراف‌ها با آرگومان‌های type-safe و deep link خودکار مدیریت می‌کند.
  • WorkManager اجرای وظایف پس‌زمینه را حتی پس از بسته شدن برنامه تضمین می‌کند، DataStore جایگزین SharedPreferences می‌شود.
  • Jetpack به چهار دسته تقسیم می‌شود: Architecture، UI، Behavior، Foundation — هر یک لایه خاصی از برنامه را پوشش می‌دهد.
  • برنامه‌های مبتنی بر Jetpack ۳۰٪ crash کمتری مرتبط با چرخه حیات دارند و به لطف راه‌حل‌های آماده معماری سریع‌تر توسعه می‌یابند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید