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 (کم بوائلرپلیٹ، زیادہ کاروباری منطق)، 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 ہے۔ اس اسکوپ میں شروع کی گئی تمام کوروٹینز 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 کوروٹینز کے ساتھ کام کرنے کے لیے suspend فنکشنز کا اعلان کرتا ہے — استفسار خود بخود بیک گراؤنڈ تھریڈ پر عمل میں آتا ہے۔ Room @Migration تشریح کے ذریعے منتقلی کو سپورٹ کرتا ہے: ڈویلپر ورژنز کے درمیان منتقلی کے لیے SQL اسکرپٹ بیان کرتا ہے، اور Room اسے ڈیٹا ضائع کیے بغیر عمل میں لاتا ہے۔ منتقلی کی عدم موجودگی میں، Room IllegalStateException پھینکتا ہے — یہ اسکیما اپ ڈیٹ کرتے وقت حادثاتی ڈیٹا کے نقصان سے پروجیکٹس کی حفاظت کرتا ہے۔
Room صرف ابتدائی اقسام اور ان کے ریپرز کو ذخیرہ کرتا ہے۔ فہرستوں، Date یا حسب ضرورت آبجیکٹ کو ذخیرہ کرنے کے لیے @TypeConverter استعمال کیا جاتا ہے — ایک جامد طریقہ جو ایک قسم کو String (JSON) یا Long (timestamp) میں تبدیل کرتا ہے۔ ٹیبلز کے درمیان تعلقات @Relation تشریح کے ساتھ نیسٹڈ آبجیکٹ اور موثر جوائن استفسارات کے لیے @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 — کوروٹین پر مبنی 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، کوروٹینز، Compose) صرف Kotlin میں دستیاب ہیں۔ Google نئے پروجیکٹس کے لیے Kotlin کی سفارش کرتا ہے۔
ViewModel میموری میں آبجیکٹ ذخیرہ کرتا ہے اور گردش کو برداشت کرتا ہے۔ onSaveInstanceState صرف سیریلائیزبل پریمیٹیو (Bundle) کے لیے موزوں ہے۔ ViewModel عمل ختم ہونے پر محفوظ نہیں رہتا — اس کے لیے SavedStateHandle کی ضرورت ہے۔
WorkManager — ان کاموں کے لیے جو ایپ بند ہونے کے بعد بھی انجام پانے چاہئیں: ہم آہنگی، لاگ اپ لوڈ، تجزیات بھیجنا۔ کوروٹینز — اسکرین سے منسلک کاموں کے لیے۔
SharedPreferences امپورٹس کو DataStoredataStore.data.first() (suspend) کے ذریعے پڑھنا، dataStore.edit { ... } کے ذریعے لکھنا۔ DataStore غیر متزامن ہے اور ANR سے محفوظ ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں