Jetpack — مجموعهای از کتابخانههای Android از Google است که توسعه را سادهتر و ایجاد برنامههای پایدار را سریعتر میکند. اجزایی مانند ViewModel، Room و Navigation وظایف معمولی را حل میکنند: مدیریت چرخه حیات، ذخیرهسازی دادهها و ناوبری. بر اساس Android Developers (2026)، Jetpack بیش از ۵۰ کتابخانه را پوشش میدهد که هر کدام از طریق AndroidX — کتابخانه سازگاری که جایگزین Support Library شد — با Android 5.0 (API 21) سازگار هستند.
نکات اصلی
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). هر دسته وظایف لایه خاصی از برنامه را حل میکند — از مدیریت داده تا رابط کاربری.
Google سه اصل Jetpack را ترویج میکند: accelerate development (boilerplate کمتر، منطق کسبوکار بیشتر)، eliminate boilerplate (ViewModel ذخیرهسازی دستی حالت را حذف میکند، Room — نوشتن SQLiteOpenHelper) و build with confidence (هر کتابخانه قبل از انتشار ۱۵+ هزار تست را پشت سر میگذارد). بر اساس Android Developers (2026)، برنامههای مبتنی بر Jetpack ۳۰٪ crash کمتری مرتبط با چرخه حیات دارند.
همه کتابخانههای Jetpack تحت شناسه AndroidX توزیع میشوند (آرتیفکتهایی به شکل androidx.*). AndroidX جایگزین Support Library (آرتیفکتهای com.android.support.*) شد و کتابخانه یکپارچه را به آرتیفکتهای ماژولار با نسخهگذاری مستقل تقسیم کرد. مهاجرت به AndroidX از طریق گزینه android.useAndroidX=true در gradle.properties انجام میشود — Android Studio به طور خودکار importها را تبدیل میکند.
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 بهروزرسانی ارسال نمیکند — این کار از نشت حافظه و crash هنگام تلاش برای بهروزرسانی Activity ناموجود جلوگیری میکند. Lifecycle — کلاسی که وضعیت فعلی را ذخیره میکند (CREATED، STARTED، RESUMED) و به سایر مؤلفهها امکان اشتراک در تغییرات وضعیت را میدهد. ViewModel، LiveData و Lifecycle با هم پایه معماری واکنشی Android را تشکیل میدهند.
viewModelScope — CoroutineScope داخلی متصل به چرخه حیات ViewModel. همه کوروتینهایی که در این scope اجرا میشوند، هنگام پاک شدن ViewModel به طور خودکار لغو میشوند. این کار مدیریت دستی Disposable و CompositeDisposable را در هر ViewModel حذف میکند. برای کار با viewModelScope به وابستگی androidx.lifecycle:lifecycle-viewmodel-ktx نیاز است.
Room — کتابخانه ORM از Jetpack است که لایه انتزاعی بر روی SQLite ارائه میدهد. به جای نوشتن کوئریهای خام SQL و تبدیل دستی Cursor به اشیاء، توسعهدهنده Entity (جدول)، DAO (Data Access Object) و Database (نقطه ورود) را اعلام میکند. Room کوئریهای SQL را در زمان کامپایل از طریق annotation @Query بررسی میکند — اگر جداول یا ستونها وجود نداشته باشند، build با خطای قابل فهم متوقف میشود.
@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 پرتاب میکند — به این ترتیب پروژهها از از دست دادن تصادفی داده هنگام بهروزرسانی طرح محافظت میشوند.
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 و انتقال آرگومان بین صفحهها را تضمین میکند.
// 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 را طوری ایجاد میکند که انگار کاربر از طریق رابط عبور کرده است.
Navigation Component از طریق NavController با BottomNavigationView ادغام میشود: هر آیتم منو به یک مقصد در گراف متصل میشود. انتقال بین تبها fragment را بازسازی نمیکند — Navigation Component وضعیت را از طریق NavBackStackEntry حفظ میکند. برای ناوبری شرطی (نمایش ورود در صورت عدم احراز هویت) از navController.navigate(condition) با بررسی در onCreate استفاده میشود.
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) ۹۷٪ دستگاههای فعال را پوشش میدهند.
پراستفادهترین آرتیفکتها: appcompat (حالت تاریک، Material Design در APIهای قدیمی)، recyclerview (لیستهای تطبیقی با ViewHolder)، constraintlayout (کانتینر انعطافپذیر با سلسلهمراتب تخت)، cardview (کارتهای Material Design)، preference (صفحه تنظیمات با سبک Material). هر آرتیفکت به طور مستقل نسخهگذاری میشود و دریافت اصلاحات را بدون بهروزرسانی کل بسته سرعت میبخشد.
علاوه بر Architecture و AndroidX، Jetpack شامل کتابخانههای تخصصی بسیاری برای وظایف معمول توسعه موبایل است. WorkManager — برای وظایف پسزمینه با اجرای تضمینی (همگامسازی، بارگذاری لاگها)، از وظایف دورهای و تأخیردار و همچنین محدودیتهای شبکه و باتری پشتیبانی میکند. DataStore — جایگزین SharedPreferences بر اساس کوروتینها که از ویژگیهای تایپشده (Preferences DataStore) و Protocol Buffers (Proto DataStore) پشتیبانی میکند.
هر کتابخانه SDK حداقل و آرتیفکت مخصوص خود را دارد. Google سالی یک بار (همزمان با انتشار Android) نسخههای اصلی و هر سه ماه یک بار پچهای امنیتی منتشر میکند. توصیه — فقط کتابخانههای ضروری را اضافه کنید تا اندازه APK افزایش نیابد. Jetpack به طور کامل (همه آرتیفکتها) بیش از ۲۰ مگابایت وزن دارد، اما یک برنامه معمولی از ۵–۷ کتابخانه استفاده میکند و ۳–۵ مگابایت به APK اضافه میکند.
سوالات متداول
بله، Google پشتیبانی از Support Library را در سال ۲۰۱۹ متوقف کرد. همه کتابخانههای جدید Jetpack و Google Play Services به AndroidX نیاز دارند. مهاجرت طی ۳۰–۶۰ دقیقه از طریق Android Studio انجام میشود.
Jetpack کاملاً با Java سازگار است. با این حال بسیاری از ویژگیها (viewModelScope، کوروتینها، Compose) فقط در Kotlin در دسترس هستند. Google برای پروژههای جدید Kotlin را توصیه میکند.
ViewModel اشیاء را در حافظه ذخیره میکند و از چرخش جان سالم به در میبرد. onSaveInstanceState فقط برای اولیههای قابل سریالسازی (Bundle) مناسب است. ViewModel هنگام کشته شدن فرآیند حفظ نمیشود — برای این کار به SavedStateHandle نیاز است.
WorkManager — برای وظایفی که حتی پس از بسته شدن برنامه باید اجرا شوند: همگامسازی، بارگذاری لاگها، ارسال آمار. کوروتینها — برای وظایف متصل به صفحه.
importهای SharedPreferences را با DataStore<Preferences> جایگزین کنید. خواندن از طریق dataStore.data.first() (suspend)، نوشتن از طریق dataStore.edit { ... }. DataStore ناهمزمان است و از ANR محافظت میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید