Android ایپ انسٹالیشن کس طرح کام کرتی ہے۔

A smartphone on engineering blueprints with gears, illustrating how app installation works

جب آپ کسی APK فائل پر "انسٹال کریں" پر ٹیپ کرتے ہیں یا Play Store سے کوئی ایپ ڈاؤن لوڈ کرتے ہیں، تو پردے کے پیچھے آپریشنز کا ایک پیچیدہ سلسلہ شروع ہو جاتا ہے۔ جو چیز ایک سادہ پروگریس بار دکھائی دیتی ہے وہ درحقیقت پیکیج پارسنگ، کرپٹوگرافک تصدیق، اجازت کا انتظام، فائل نکالنے، اور کوڈ کی اصلاح پر مشتمل درجنوں مراحل کی نمائندگی کرتی ہے۔ اس عمل کو سمجھنے سے یہ سمجھانے میں مدد ملتی ہے کہ تنصیبات بعض اوقات کیوں ناکام ہو جاتی ہیں اور آپ اس کے بارے میں کیا کر سکتے ہیں۔

اس آرٹیکل میں، ہم Android انسٹالیشن پائپ لائن کے ہر بڑے مرحلے سے گزریں گے، سسٹم کو APK موصول ہونے سے لے کر اس مقام تک جہاں ایپ لانچ ہونے کے لیے تیار ہے۔

مرحلہ 1: انسٹالیشن شروع کرنا

تنصیب کا عمل ماخذ کے لحاظ سے مختلف طریقے سے شروع ہوتا ہے:

  • پلے اسٹور: Play Store ایپ APK (یا اسپلٹ APKs) ڈاؤن لوڈ کرتی ہے اور سسٹم کے پیکیج انسٹالر کو خصوصی مراعات کے ساتھ کال کرتی ہے جو صارف کی کچھ تصدیقوں کو نظرانداز کرتی ہے۔
  • سائیڈ لوڈنگ: جب آپ APK فائل کھولتے ہیں، تو Android پیکیج انسٹالر کی سرگرمی شروع کرتا ہے۔ Android 8.0 اور اس کے بعد کے ورژن پر، انسٹال کرنے والی ایپ کے پاس اپنے مخصوص سورس کے لیے "نامعلوم ایپس انسٹال کریں" کی اجازت ہونی چاہیے۔
  • ADB: adb install کمانڈ گرافیکل انسٹالر کو مکمل طور پر نظرانداز کرتے ہوئے USB پر پیکیج مینیجر سروس کے ساتھ براہ راست بات چیت کرتی ہے۔

ماخذ سے قطع نظر، تمام تنصیبات بالآخر ایک ہی سسٹم سروس تک پہنچتی ہیں: PackageManagerService (PMS)۔ یہ Android پر تمام پیکیج آپریشنز کے لیے مرکزی اتھارٹی ہے۔

مرحلہ 2: پیکیج پارس کرنا

کسی بھی چیز سے پہلے، سسٹم کو یہ سمجھنے کی ضرورت ہے کہ وہ کیا انسٹال کرنے والا ہے۔ PackageManagerService پیکیج پارسر کو APK فائل کو پڑھنے اور اس کا میٹا ڈیٹا نکالنے کی درخواست کرتی ہے۔

تجزیہ کار AndroidManifest.xml فائل کو APK کے اندر سے پڑھتا ہے۔ یہ بائنری XML فائل اہم معلومات پر مشتمل ہے:

  • پیکیج کا نام: ایپ کے لیے منفرد شناخت کنندہ (جیسے، com.example.myapp)
  • ورژن کوڈ اور نام: اس بات کا تعین کرنے کے لیے استعمال کیا جاتا ہے کہ آیا یہ اپ گریڈ ہے یا تازہ انسٹال
  • کم از کم اور ہدف SDK ورژن: آلہ کے ساتھ مطابقت کا تعین کرتا ہے۔
  • اعلان کردہ اجازتیں: ایپ کی درخواستوں اور حسب ضرورت اجازتوں کو دونوں اجازت دیتے ہیں جو اس کی وضاحت کرتا ہے۔
  • اجزاء: سرگرمیاں، خدمات، براڈکاسٹ ریسیورز، اور مواد فراہم کرنے والے جو ایپ رجسٹر کرتی ہے
  • ہارڈ ویئر اور سافٹ ویئر کی خصوصیات: ضروریات جیسے کیمرہ، GPS، یا مخصوص OpenGL ورژن

اگر مینی فیسٹ خراب ہے یا APK کا ڈھانچہ غلط ہے، تو انسٹالیشن اس مرحلے پر "پارس ایرر" پیغام کے ساتھ ناکام ہو جاتی ہے۔ یہ سب سے عام وجوہات میں سے ایک ہے جس کی وجہ سے سائیڈ لوڈ شدہ APKs انسٹال نہیں ہو پاتے ہیں۔

مرحلہ 3: مطابقت کی جانچ

مینی فیسٹ کو پارس کرنے کے بعد، سسٹم مطابقت کی جانچ کا ایک سلسلہ انجام دیتا ہے:

  • SDK ورژن: اگر ایپ کا minSdkVersion ڈیوائس کے API لیول سے زیادہ ہے تو انسٹالیشن کو مسترد کر دیا جاتا ہے۔
  • ABI مطابقت: اگر APK مقامی لائبریریوں پر مشتمل ہے، تو سسٹم چیک کرتا ہے کہ آیا وہ ڈیوائس کے CPU فن تعمیر سے مماثل ہیں۔ صرف armeabi-v7a لائبریریوں والا APK صرف x86 ڈیوائس پر انسٹال نہیں ہوگا۔
  • مطلوبہ خصوصیات: اگر ایپ مطلوبہ ہارڈویئر خصوصیات (جیسے android.hardware.telephony) کا اعلان کرتی ہے، تو سسٹم اس بات کی تصدیق کرتا ہے کہ ڈیوائس ان کو سپورٹ کرتی ہے۔
  • دستیاب اسٹوریج: سسٹم چیک کرتا ہے کہ آیا ایپ کو انسٹال کرنے کے لیے کافی خالی جگہ ہے، بشمول نکالی گئی مقامی لائبریریوں اور آپٹمائزڈ DEX فائلوں کے لیے جگہ۔

مرحلہ 4: دستخط کی توثیق

یہ تنصیب کے عمل میں سب سے اہم اقدامات میں سے ایک ہے۔ Android APK کے کرپٹوگرافک دستخط کی تصدیق کرتا ہے تاکہ اس کی سالمیت اور صداقت کو یقینی بنایا جا سکے۔

تصدیقی عمل کا انحصار اس بات پر ہے کہ کون سی دستخطی اسکیمیں موجود ہیں:

V1 دستخط (JAR دستخط)

سسٹم دستخطی فائلوں (.SF، .RSA یا .DSA کے لیے META-INF/ ڈائرکٹری کو چیک کرتا ہے۔ APK میں موجود ہر فائل کی تصدیق مینی فیسٹ میں درج ڈائجسٹ کے خلاف کی جاتی ہے۔ یہ سست ہے کیونکہ ہر فائل کو انفرادی طور پر ہیش کیا جانا چاہیے۔)

V2 دستخط (APK دستخطی اسکیم v2)

Android 7.0 میں متعارف کرایا گیا، یہ اسکیم پورے APK کو بائنری بلاب کے طور پر سائن کرتی ہے۔ دستخطی بلاک زپ سنٹرل ڈائرکٹری اور اینڈ آف سینٹرل ڈائرکٹری ریکارڈ کے درمیان داخل کیا جاتا ہے۔ توثیق بہت تیز ہے کیونکہ یہ خام بائٹس پر انفرادی اندراجات کو دبانے کی ضرورت کے بغیر کام کرتی ہے۔

V3 دستخط (کلیدی گردش)

Android 9.0 سے دستیاب، V3 کلیدی گردش کی حمایت کے ساتھ V2 کو بڑھاتا ہے۔ اس میں ایک پروف آف روٹیشن ڈھانچہ شامل ہے جو پرانی اور نئی سائننگ کیز کو جوڑتا ہے، جس سے ڈیولپرز کو اپ ڈیٹ کی مطابقت برقرار رکھتے ہوئے اپنی سائننگ کلید کو تبدیل کرنے کی اجازت ملتی ہے۔

V4 دستخط (بڑھتی ہوئی)

Android 11 نے اضافی تنصیبات کے لیے V4 متعارف کرایا۔ یہ مرکل ٹری پر مبنی دستخط فراہم کرتا ہے جو انفرادی بلاکس کی تصدیق کی اجازت دیتا ہے کیونکہ وہ ڈیوائس پر سٹریم ہوتے ہیں۔

اگر دستخط کی توثیق کسی بھی وجہ سے ناکام ہو جاتی ہے، تو تنصیب فوری طور پر ختم کر دی جاتی ہے۔ آپ ہمارے APK تصدیق کنندہ ٹول کو انسٹال کرنے سے پہلے APK کے دستخط چیک کر سکتے ہیں۔

دستخطی ملاپ کو اپ ڈیٹ کریں۔

اگر اسی پیکیج کے نام والی ایپ پہلے سے انسٹال ہے، تو سسٹم ایک اضافی چیک کرتا ہے: نئے APK کا دستخط کرنے والا سرٹیفکیٹ موجودہ انسٹالیشن کے سرٹیفکیٹ سے مماثل ہونا چاہیے۔ یہ نقصان دہ فریق کو کسی جائز ایپ کو چھیڑ چھاڑ والے ورژن سے تبدیل کرنے سے روکتا ہے۔ اگر دستخط مماثل نہیں ہیں، تو آپ کو خرابی نظر آئے گی "ایپ انسٹال نہیں ہے: پیکیج اسی نام کے موجودہ پیکیج سے متصادم ہے۔"

مرحلہ 5: صارف کی تصدیق

سائیڈ لوڈ شدہ تنصیبات کے لیے، سسٹم انسٹالیشن کی تصدیق کا ڈائیلاگ دکھاتا ہے جس میں دکھایا گیا ہے:

  • ایپ کا نام اور آئیکن (APK کے وسائل سے اخذ کردہ)
  • ایپ کی درخواستوں کی اجازت (پرانے Android ورژن پر)
  • چاہے یہ نئی انسٹالیشن ہو یا اپ ڈیٹ
  • ایپ کے ذریعہ یا ممکنہ خطرات کے بارے میں کوئی انتباہ

Android 12 اور بعد میں، تصدیقی اسکرین آسان ہے کیونکہ رن ٹائم کی اجازتیں انفرادی طور پر دی جاتی ہیں جب ایپ کو پہلی بار ان کی ضرورت ہوتی ہے، بجائے اس کے کہ انسٹال کے وقت۔

مرحلہ 6: فائل نکالنا اور جگہ کا تعین

ایک بار جب صارف تصدیق کرتا ہے (یا Play Store انسٹال کرنے کے لیے، خود بخود)، سسٹم فائلیں نکالنا اور رکھنا شروع کر دیتا ہے:

APK اسٹوریج

APK فائل خود /data/app/[package-name]-[random]/base.apk میں کاپی کی گئی ہے۔ تقسیم شدہ APK کی تنصیبات کے لیے، split_config.arm64_v8a.apk جیسی اضافی فائلیں بنیادی APK کے ساتھ رکھی جاتی ہیں۔ ڈاؤن لوڈز فولڈر میں اصل APK کو تبدیل یا حذف نہیں کیا گیا ہے۔

مقامی لائبریری نکالنا

اگر APK مقامی لائبریریوں پر مشتمل ہے (lib/ ڈائرکٹری میں)، تو انہیں /data/app/[package-name]-[random]/lib/[abi]/ میں نکالا جاتا ہے۔ Android کے نئے ورژنز پر، ایپس مقامی لائبریریوں کو APK کے اندر کمپریسڈ رکھنے کا انتخاب کر سکتی ہیں اور انہیں android:extractNativeLibs="false" کا استعمال کرتے ہوئے براہ راست لوڈ کر سکتی ہیں، جس سے اسٹوریج کی جگہ کی بچت ہوتی ہے۔

ڈیٹا ڈائرکٹری کی تخلیق

سسٹم /data/data/[package-name]/ (یا /data/user/0/[package-name]/ ملٹی یوزر ڈیوائسز پر) ایپ کی نجی ڈیٹا ڈائرکٹری بناتا ہے۔ یہ ڈائرکٹری ایپ کو تفویض کردہ ایک منفرد لینکس UID کی ملکیت ہے، اس بات کو یقینی بناتے ہوئے کہ کوئی اور ایپ روٹ مراعات کے بغیر اس تک رسائی حاصل نہ کر سکے۔

مرحلہ 7: DEX آپٹیمائزیشن

یہ وہ مرحلہ ہے جہاں Android ایپ کے بائیک کوڈ کو ڈیوائس کے مخصوص ہارڈ ویئر کے لیے موزوں فارمیٹ میں تبدیل کرتا ہے۔ یہ عمل Android کی تاریخ میں نمایاں طور پر تیار ہوا ہے:

ڈالوک دور (Android 4.4 اور اس سے پہلے)

اصل Dalvik ورچوئل مشین جسٹ ان ٹائم (JIT) تالیف کا استعمال کرتی ہے۔ انسٹالیشن کے دوران، classes.dex فائل کو ایک ODEX فائل میں آپٹمائز کیا گیا جس میں تصدیق شدہ اور آپٹمائزڈ بائٹ کوڈ موجود تھا۔ یہ نسبتاً تیز تھا لیکن اس کا مطلب یہ ہے کہ ایپ رن ٹائم پر آہستہ چلتی ہے کیونکہ زیادہ تر کوڈ کی تشریح کی جاتی ہے۔

AOT کے ساتھ ART (Android 5.0 سے 6.0)

Android Runtime (ART) نے Dalvik کی جگہ لے لی اور Ahead-Of-Time (AOT) تالیف متعارف کرائی۔ انسٹالیشن کے دوران، پورے DEX بائٹ کوڈ کو مقامی مشین کوڈ پر مرتب کیا گیا تھا۔ اس سے ایپس تیزی سے چلتی ہیں لیکن انسٹالیشن کے وقت اور اسٹوریج کے استعمال میں نمایاں اضافہ ہوا ہے۔ کچھ ایپس کو انسٹال ہونے میں کئی منٹ لگے۔

پروفائل گائیڈڈ کمپلیشن (Android 7.0+)

جدید Android ایک ہائبرڈ طریقہ استعمال کرتا ہے۔ تنصیب کے دوران، صرف اہم آغاز کے راستے مرتب کیے جاتے ہیں۔ جیسے ہی صارف ایپ چلاتا ہے، نظام اکثر استعمال ہونے والے کوڈ راستوں کی نشاندہی کرنے والے ایگزیکیوشن پروفائلز کو اکٹھا کرتا ہے۔ بیکار دیکھ بھال کے دوران (عام طور پر رات بھر چارج کرتے وقت)، سسٹم ان گرم راستوں کو مقامی کوڈ میں مرتب کرتا ہے۔ یہ تنصیب کی رفتار، اسٹوریج کے استعمال، اور رن ٹائم کارکردگی کو متوازن کرتا ہے۔

مرتب کردہ کوڈ /data/dalvik-cache/ میں یا APK کے ساتھ .odex، .vdex، اور .art فائلوں کے طور پر محفوظ ہے۔ .vdex فائل تصدیق شدہ DEX کوڈ پر مشتمل ہے، .odex فائل میں مرتب کردہ مقامی کوڈ ہے، اور .art فائل میں تیز تر آغاز کے لیے پہلے سے شروع کی گئی ہیپ امیجز شامل ہیں۔

مرحلہ 8: اجازت رجسٹریشن

PackageManagerService ایپ کی اعلان کردہ اجازتوں اور اجزاء کو سسٹم کے ساتھ رجسٹر کرتی ہے:

  • انسٹال وقت کی اجازتیں۔ (جیسے INTERNET یا VIBRATE صارف کے تعامل کے بغیر خودکار طور پر عطا کیے جاتے ہیں۔)
  • رن ٹائم اجازتیں۔ (جیسے CAMERA یا LOCATION رجسٹرڈ ہیں لیکن منظور نہیں ہیں۔ ایپ کو رن ٹائم کے وقت ان کی درخواست کرنی چاہیے۔)
  • ارادے کے فلٹرز رجسٹرڈ ہیں لہذا سسٹم کو معلوم ہوتا ہے کہ کون سی ایپس کون سی کارروائیاں سنبھال سکتی ہیں (جیسے URL کھولنا یا مواد کا اشتراک کرنا)۔
  • مواد فراہم کرنے والے اپنے حکام کے ساتھ رجسٹرڈ ہیں تاکہ دیگر ایپس ان سے استفسار کرسکیں۔

مرحلہ 9: سسٹم انٹیگریشن

آخری مراحل ایپ کو Android سسٹم میں ضم کرتے ہیں:

  • پیکیج ڈیٹا بیس کی تازہ کاری: سسٹم کے پیکیج ڈیٹا بیس (/data/system/packages.xml) کو نئی ایپ کی معلومات کے ساتھ اپ ڈیٹ کیا جاتا ہے، بشمول اس کی تفویض کردہ UID، اجازتیں، اور اجزاء کے اعلانات۔
  • لانچر کی اطلاع: ہوم اسکرین لانچر کو نئی ایپ کے بارے میں مطلع کیا جاتا ہے تاکہ یہ ایپ آئیکن کو ڈسپلے کر سکے۔
  • نشر: سسٹم PACKAGE_ADDED براڈکاسٹ بھیجتا ہے، جس سے دوسری ایپس کو نئی انسٹالیشن پر رد عمل کا اظہار کرنے کی اجازت ملتی ہے (مثال کے طور پر، بیک اپ ایپس بیک اپ کو شیڈول کر سکتی ہیں)۔
  • SELinux سیاق و سباق: ایپ کی فائلوں کو اس کے ہدف SDK ورژن اور اعلان کردہ اجازتوں کی بنیاد پر مناسب SELinux سیکیورٹی سیاق و سباق کے ساتھ لیبل لگایا گیا ہے۔

تنصیبات کیوں ناکام ہوتی ہیں۔

تنصیب کی پائپ لائن کو سمجھنا عام ناکامیوں کی تشخیص میں مدد کرتا ہے:

  • "تجزیہ کی خرابی": APK خراب ہے، نامکمل ہے یا اس کا مینی فیسٹ خراب ہے۔ یہ اکثر نامکمل ڈاؤن لوڈز یا غلط طریقے سے تبدیل شدہ فائلوں کے ساتھ ہوتا ہے۔
  • "ایپ انسٹال نہیں ہوئی" (دستخط سے مماثل): آپ ایک APK کے ساتھ ایک ایپ کو اپ ڈیٹ کرنے کی کوشش کر رہے ہیں جس پر ایک مختلف کلید کے ذریعے دستخط کیے گئے ہیں۔ آپ کو پہلے موجودہ ورژن کو ان انسٹال کرنا ہوگا۔
  • "ناکافی اسٹوریج": APK، نکالی گئی لائبریریوں، اور DEX آپٹیمائزیشن آؤٹ پٹ کے لیے کافی جگہ نہیں ہے۔ درکار اصل جگہ عام طور پر APK سائز کا 2-3x ہے۔
  • "پیکیج کا موجودہ پیکج سے متصادم ہے": پیکیج کا ایک ہی نام لیکن مختلف دستخط۔ Play Store اور سائیڈ لوڈ شدہ ورژن کے درمیان سوئچ کرتے وقت عام۔
  • ورژن ڈاؤن گریڈ بلاک کر دیا گیا: ڈیفالٹ کے طور پر، Android نئے ورژن پر پرانے ورژن کو انسٹال کرنے سے روکتا ہے۔ ADB اسے adb install -d کے ساتھ اوور رائیڈ کر سکتا ہے۔

اسپلٹ APK انسٹالیشن

اسپلٹ APK انسٹال کرتے وقت (ایپ بنڈلز سے)، عمل قدرے مختلف ہوتا ہے۔ سسٹم سیشن کی بنیاد پر تنصیب API استعمال کرتا ہے:

  1. ایک نیا انسٹالیشن سیشن بنایا گیا ہے۔
  2. ہر اسپلٹ APK کو سیشن میں لکھا جاتا ہے۔
  3. مکمل تصدیقی پائپ لائن کو متحرک کرتے ہوئے، سیشن پرعزم ہے۔
  4. تمام اسپلٹس میں پیکیج کے نام، ورژن کوڈز، اور دستخطی سرٹیفکیٹس کا مماثل ہونا ضروری ہے۔

یہ وہ طریقہ کار ہے جو XAPK انسٹالرز اور ٹولز جیسے ہمارے APKS سے APK انضمام کے ذریعے ملٹی فائل انسٹالیشن کو ہینڈل کرنے کے لیے استعمال کیا جاتا ہے۔

ADB کے ذریعے تنصیب

جب آپ adb install استعمال کرتے ہیں، تو یہ عمل گرافیکل انسٹالر کو نظرانداز کرتا ہے لیکن اسی اندرونی پائپ لائن کی پیروی کرتا ہے۔ ADB ساکٹ کنکشن کے ذریعے پیکیج مینیجر سروس کے ساتھ بات چیت کرتا ہے۔ یہ اضافی جھنڈوں کی حمایت کرتا ہے جو GUI کے ذریعے دستیاب نہیں ہیں:

  • -r: موجودہ ایپ کو تبدیل کریں (دوبارہ انسٹال کرنے کی اجازت دیں)
  • -d: ورژن کو ڈاؤن گریڈ کرنے کی اجازت دیں۔
  • -g: رن ٹائم کی تمام اجازتیں فوری طور پر دیں۔
  • -t: صرف ٹیسٹ APKs کی تنصیب کی اجازت دیں۔
  • --install-multiple: ایک ہی سیشن میں تقسیم شدہ APKs انسٹال کریں۔

ان انسٹالیشن کے دوران کیا ہوتا ہے۔

مکمل ہونے کے لیے، جب کسی ایپ کو ہٹا دیا جاتا ہے تو کیا ہوتا ہے:

  1. ایپ کے عمل کو ختم کر دیا گیا ہے۔
  2. APK اور نکالی گئی لائبریریوں کو /data/app/ سے حذف کر دیا گیا ہے۔
  3. ایپ کی نجی ڈیٹا ڈائرکٹری کو ہٹا دیا جاتا ہے (جب تک صارف ڈیٹا رکھنے کا انتخاب نہ کرے)
  4. مرتب شدہ DEX کیشے فائلوں کو حذف کر دیا گیا ہے۔
  5. پیکیج ڈیٹا بیس کو اپ ڈیٹ کر دیا گیا ہے۔
  6. ایک PACKAGE_REMOVED براڈکاسٹ بھیجا جاتا ہے۔
  7. لانچر ایپ آئیکن کو ہٹاتا ہے۔

نوٹ کریں کہ بیرونی اسٹوریج (/Android/data/[package]/ اور /Android/obb/[package]/ پر ایپ کے ساتھ مخصوص فائلز کو بھی Android 10 اور بعد کے ورژن پر حذف کر دیا جاتا ہے، گنجائش والے اسٹوریج کے نفاذ کی بدولت۔)

پیکج مینجر کو سمجھنا ڈیبگنگ کا وقت کیوں بچاتا ہے۔

Android انسٹالیشن کا عمل سیکیورٹی چیک، فائل آپریشنز، اور سسٹم انٹیگریشن کا احتیاط سے ترتیب دیا گیا سلسلہ ہے۔ صارفین کو چھیڑ چھاڑ سے بچانے سے لے کر مخصوص ہارڈ ویئر کے لیے کارکردگی کو بہتر بنانے تک ہر قدم ایک مقصد پورا کرتا ہے۔ جب تنصیبات ناکام ہو جاتی ہیں، تو غلطی عام طور پر اس پائپ لائن کے ایک مخصوص مرحلے کی طرف اشارہ کرتی ہے، اور اس عمل کو سمجھنے سے آپ کو مسائل کی تشخیص اور جلد حل کرنے میں مدد ملتی ہے۔

Play Store سے انسٹال کرنا، ہاتھ سے APK کو سائیڈ لوڈ کرنا، اور ADB کے ساتھ تمام فنل کو اسی بنیادی پائپ لائن کے ذریعے آگے بڑھانا، جو اس بات کو یقینی بناتا ہے کہ آپ کے آلے پر موجود ہر ایپ کی توثیق کی گئی ہے، صحیح طریقے سے رکھی گئی ہے، اور آپ کے ہارڈ ویئر کے لیے بہتر بنائی گئی ہے۔

انجینئرڈ اور دستاویزی Mst Shafale کے ذریعہ لیڈ ڈیولپر اور Android پیکیج آرکیٹیکٹ • Android 12–15 پر تصدیق شدہ

Mst Shaefale xapktoapk.com پر کلائنٹ سائڈ XAPK/APKS انضمام، بائنری مینی فیسٹ پارسر، اور APK v1+v2 سائننگ ٹولز کو برقرار رکھتی ہے۔ ایک پرانی کمانڈ یا OS کی تبدیلی کو اسپاٹ کریں؟ ایک ادارتی نوٹ بھیجیں۔