Android Profiler Android Studio میں شامل ٹولز کا ایک سیٹ ہے جو ایپلیکیشنز کی کارکردگی کو ریئل ٹائم میں مانیٹر کرتا ہے۔ یہ تیسرے فریق کی لائبریریز انسٹال کیے بغیر CPU لوڈ، میموری کی کھپت، نیٹ ورک ٹریفک اور توانائی کی کھپت کو ٹریک کرنے کی اجازت دیتا ہے۔ Android Developers کے مطابق، پروفائلر براہ راست IDE میں ضم ہے اور منسلک ڈیوائس پر کسی بھی عمل کے لیے ملی سیکنڈ کی درستگی کے ساتھ میٹرکس فراہم کرتا ہے۔
اہم نکات
Android Profiler Android Studio کا ایک جزو ہے جس نے پرانے Android Monitor اور DDMS کی جگہ لے لی ہے۔ یہ ایپلیکیشن کے تمام پہلوؤں کو پروفائل کرنے کے لیے ایک متحد انٹرفیس فراہم کرتا ہے: CPU Profiler پروسیسر کے تجزیہ کے لیے، Memory Profiler میموری کے ساتھ کام کے لیے، Network Profiler نیٹ ورک کی درخواستوں کے لیے اور Energy Profiler توانائی کی کھپت کے لیے۔ Android Studio کے ذریعے ایپلیکیشن شروع کرنے پر ڈیٹا خود بخود جمع ہو جاتا ہے۔
پروفائلر ایمولیٹر اور USB کے ذریعے منسلک فزیکل ڈیوائس دونوں پر کام کرتا ہے۔ Google I/O 2023 کے مطابق، Android Profiler 70% سے زیادہ Android پروجیکٹس میں استعمال ہوتا ہے اور کارکردگی کی تشخیص کا معیاری آلہ سمجھا جاتا ہے۔ تیسرے فریق کے حل کے مقابلے میں اہم فائدہ صفر انضمام ہے: build.gradle میں انحصار شامل کرنے یا ایپلیکیشن کے کوڈ میں ترمیم کرنے کی ضرورت نہیں ہے۔
Android Profiler کا فن تعمیر Perfetto پر مبنی ہے — Android کا سسٹم ٹریسر جو کرنل اور ایپلیکیشن کی سطح پر ڈیٹا اکٹھا کرتا ہے۔ Perfetto کم سے کم اوور ہیڈ (1% CPU سے کم) کو یقینی بناتا ہے اور 30 منٹ تک طویل مدتی ریکارڈنگ کو سپورٹ کرتا ہے۔ یہ نہ صرف تیز رفتار آپریشنز بلکہ طویل منظرناموں کو بھی پروفائل کرنے کی اجازت دیتا ہے — اسکرینوں کے درمیان منتقلی، بیک گراؤنڈ سنکرونائزیشن، ایک گھنٹے کے استعمال کے دوران میموری کی کھپت۔
پروفائلر چار قسم کا ڈیٹا اکٹھا کرتا ہے: CPU — ہر کور اور تھریڈ کا لوڈ، Memory — Java Heap، Native Heap، Stack، Graphics، Network — تمام آنے والی اور جانے والی درخواستیں، Energy — توانائی کی کھپت کے زمرے (Idle، Light، Medium، Heavy)۔ ڈیٹا ٹائم لائن پر مطابقت پذیر ہوتا ہے — آپ بیک وقت دیکھ سکتے ہیں کہ CPU کی تبدیلی Memory اور توانائی کی کھپت کو کیسے متاثر کرتی ہے۔
CPU Profiler ٹائم لائن پر ریئل ٹائم میں پروسیسر لوڈ دکھاتا ہے، جو ایپلیکیشن کے تھریڈز کے حساب سے تقسیم ہوتا ہے۔ ہر تھریڈ کو رنگین لکیر یا علاقے سے دکھایا جاتا ہے — علاقہ جتنا وسیع ہوگا، تھریڈ اتنا ہی زیادہ پروسیسر وقت لے گا۔ سرخ علاقوں کا مطلب ایپلیکیشن کا کام ہے، نیلے — سسٹم کالز، سرمئی — انتظار۔
تفصیلی تجزیہ کے لیے CPU Profiler تین ریکارڈنگ موڈز کو سپورٹ کرتا ہے: Trace Java Methods (تمام Java طریقوں کا سراغ لگانا)، Trace C/C++ Functions (NDK مقامی افعال کا سراغ لگانا) اور Sample Java Methods (نمونہ لینا، تجویز کردہ موڈ)۔ نمونہ لینا سب سے کم اوور ہیڈ دیتا ہے اور روزانہ پروفائلنگ کے لیے موزوں ہے، جبکہ مکمل سراغ لگانا پیچیدہ مسائل تلاش کرنے کے لیے استعمال ہوتا ہے۔
// مثال: CPU Profiler کا تجزیہ اس طریقے کو رکاوٹ کے طور پر دکھائے گا
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler inBackgroundThread میں اعلی CPU لوڈ دکھائے گا
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// پروفائلنگ کے بعد سفارش:
// computeHeavyTransformation 80% وقت لے رہا ہے — نتیجے کو کیش کریں
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
ریکارڈنگ کے بعد CPU Profiler Top-Down Tree دکھاتا ہے — ہر طریقہ کے عملدرآمد کے وقت کے ساتھ کال ٹری۔ Self Time/Total کالم پر توجہ دیں: اگر کسی طریقہ کا Self Time 16 ms سے زیادہ ہے اور یہ UI تھریڈ سے بلایا گیا ہے — تو یہ یقینی فریم ڈراپ ہے۔ حل — بھاری حسابات کو Dispatchers.IO یا Default کے ذریعے بیک گراؤنڈ تھریڈ میں منتقل کریں۔
Sample Java Methods — 3–5% اوور ہیڈ کے ساتھ روزانہ پروفائلنگ کے لیے تجویز کردہ موڈ۔ Trace Java Methods — ہر کال کا مکمل سراغ لگانا، 15% تک اوور ہیڈ، مختصر ریکارڈنگ (5–10 سیکنڈ) کے لیے استعمال ہوتا ہے۔ Trace C/C++ Functions — Linux Perf کے ذریعے NDK کوڈ کا سراغ لگانا، گیمز اور C++ لائبریریز کے تجزیہ کے لیے ناگزیر۔ مسئلہ کی قسم کے مطابق موڈز تبدیل کریں۔
Memory Profiler ایپلیکیشن کے تمام میموری زمروں کو ٹریک کرتا ہے: Java Heap (JVM آبجیکٹ)، Native Heap (JNI کے ذریعے C/C++ مختص)، Stack (تھریڈ اسٹیک) اور Graphics (ٹیکسچر، GPU بفرز)۔ اہم بصری تشکیل میموری کی کھپت کا وقت گراف ہے، جہاں ہر زمرہ اپنے رنگ میں دکھایا جاتا ہے۔ اگر گراف کوڑا کرکٹ جمع کرنے کے بعد کم نہیں ہوتا — رساو کا شبہ کریں۔
رساو تلاش کرنے کے لیے Capture Heap Dump فنکشن استعمال کریں۔ ڈمپ کے لمحے، Android Profiler ایپلیکیشن کو ~100 ms کے لیے روکتا ہے اور HPROF فائل بناتا ہے — Java Heap کے تمام زندہ آبجیکٹس کا مکمل سنیپ شاٹ۔ ڈمپ کھولنے کے بعد آپ Retained Size (آبجیکٹ ہٹانے پر خالی ہونے والی میموری کا حجم) کے مطابق آبجیکٹس کو ترتیب دے سکتے ہیں اور Activity، Fragment یا Bitmap کی مثالیں تلاش کر سکتے ہیں جنہیں تباہ ہو جانا چاہیے تھا۔
Google I/O 2022 کے مطابق، Memory Profiler اور LeakCanary کا امتزاج Android پر میموری رساو کا پتہ لگانے کے 95% منظرناموں کا احاطہ کرتا ہے۔ LeakCanary خود بخود کام کرتا ہے — بیک گراؤنڈ میں رساو کا پتہ لگاتا ہے۔ Memory Profiler دستی تجزیہ کے لیے ضروری ہے: آپ صرف رساو نہیں بلکہ مختصات کی مکمل تصویر دیکھتے ہیں۔
| میموری کا زمرہ | وضاحت | عام سائز |
|---|---|---|
| Java Heap | JVM ہیپ: Kotlin/Java آبجیکٹ | 5–200 MB |
| Native Heap | JNI، NDK کے ذریعے مختص | 1–100 MB |
| Graphics | ٹیکسچر، GPU بفر | 10–200 MB |
| Stack | تمام تھریڈز کے اسٹیک | 1–10 MB |
ڈمپ حاصل کرنے کے بعد آبجیکٹس کو Retained Size کے مطابق ترتیب دیں — یہ آبجیکٹ ہٹانے پر خالی ہونے والی میموری کا حجم ہے۔ بڑے Retained Size والی Activity، Fragment اور Bitmap کی مثالیں تلاش کریں جو میموری میں نہیں ہونی چاہئیں۔ Reference Tree ٹیب پر جائیں تاکہ آبجیکٹ کو تھامے رکھنے والی حوالہ جاتی زنجیر دیکھ سکیں — عام طور پر یہ سنگلٹن کا جامد فیلڈ یا صاف نہ کیا گیا کال بیک ہوتا ہے۔ ایک اہم میٹرک مختص کی شرح ہے (فی سیکنڈ مختصات کی تعداد)۔ اگر مختص کی شرح 10,000 آبجیکٹ/سیکنڈ سے تجاوز کر جائے تو ایپلیکیشن عارضی آبجیکٹ بنانے اور ہٹانے میں بہت زیادہ وقت صرف کرتی ہے، جو GC پر بوجھ ڈالتی ہے اور مائیکرو فریز کا سبب بنتی ہے۔ اس صورت میں View Inspector ٹول استعمال کریں اور لوپس میں بار بار آبجیکٹ بننے والی جگہیں تلاش کریں۔
Network Profiler ٹائم لائن پر ایپلیکیشن کی تمام نیٹ ورک درخواستوں کو ریئل ٹائم میں دکھاتا ہے۔ ہر درخواست افقی بار کے طور پر دکھائی جاتی ہے — اس کی لمبائی عملدرآمد کے وقت کے مطابق ہوتی ہے، رنگ — درخواست کی قسم (GET، POST، PUT، DELETE) کے مطابق۔ پیمانے کو اسکرول کرکے آپ دیکھ سکتے ہیں کہ درخواستیں وقت کے ساتھ کیسے تقسیم ہوئی ہیں اور کیا وہ ڈپلیکیٹ ہو رہی ہیں۔
تمام مشہور لائبریریز سپورٹ ہیں: OkHttp، Retrofit، Volley، Ktor۔ Ktor اور OkHttp کے لیے پروفائلر انٹرسیپٹرز اور کنورٹرز سمیت مکمل کال اسٹیک دکھاتا ہے۔ ہر درخواست کے لیے درخواست کے ہیڈرز اور جواب کے ہیڈرز، جواب کا باڈی (1 MB تک)، اسٹیٹس کوڈ اور دورانیہ دستیاب ہیں۔
Network Profiler کے ذریعے پہچانے جانے والے عام مسائل: کیشے کی کمی (ہر کھولنے پر ایک ہی URL کی درخواست کی جاتی ہے)، ڈپلیکیٹ درخواستیں (دو اجزاء ایک ہی وقت میں ایک جیسا ڈیٹا لوڈ کرتے ہیں)، ضرورت سے زیادہ جواب کا سائز (سرور 50 KB کی ضرورت ہونے پر 5 MB بھیجتا ہے)۔ Network Profiler ٹائم لائن پر ایک نظر ڈال کر ہی ان مسائل کو دیکھنے میں مدد کرتا ہے۔
سست نیٹ ورکس کی نقلی کے لیے Android Studio میں Network Conditioning استعمال کریں — یہ بینڈوتھ کو 3G/2G تک محدود کرنے اور تاخیر شامل کرنے کی اجازت دیتا ہے۔ یہ خاص طور پر غیر مستحکم انٹرنیٹ والے علاقوں میں کام کرنے والی ایپلیکیشنز کے لیے خراب نیٹ ورک حالات میں رویے کی جانچ کے لیے انتہائی اہم ہے۔
Energy Profiler Perfetto ڈیٹا کی بنیاد پر بیٹری پر ایپلیکیشن کے اثرات کا جائزہ لیتا ہے۔ یہ آلہ ملی ایمپیئر میں اصل کھپت کی پیمائش نہیں کرتا، بلکہ ہر آپریشن کو توانائی کی کھپت کے پانچ زمروں میں سے ایک میں درجہ بندی کرتا ہے: Idle، Light، Medium، High اور Overloaded۔ Energy Profiler کی ٹائم لائن رنگ سے نمایاں ہوتی ہے: سبز (ہلکا بوجھ)، پیلا (درمیانی)، سرخ (زیادہ)۔
سرخ علاقوں کی اہم وجوہات: WakeLock (ایپلیکیشن پروسیسر کو فعال رکھتی ہے)، مقام GPS (اعلی درستگی کے ساتھ مسلسل کوآرڈینیٹ کی درخواستیں)، Keep-Alive کنکشنز (سرور کے ساتھ بار بار ڈیٹا کا تبادلہ)، بڑی ڈیٹا منتقلی (فائل بھیجنا، سٹریمنگ)۔ Energy Profiler بالکل دکھاتا ہے کہ کس آپریشن نے کس وقت توانائی کی کھپت کی چوٹی کا سبب بنی۔
Android Developers کے مطابق، عام ایپلیکیشن کو High زمرے میں 5% سے زیادہ وقت نہیں گزارنا چاہیے۔ اگر Energy Profiler پروفائلنگ کے وقت کا 10% سے زیادہ سرخ علاقوں کے طور پر دکھاتا ہے — تو ایپلیکیشن بیٹری ڈرین کے معیار پر جائزہ پاس نہیں کرے گی۔ سفارش — بیک گراؤنڈ کاموں کے لیے WorkManager استعمال کریں، مقام کی درخواستوں کو کم سے کم ضروری درستگی تک محدود کریں اور نیٹ ورک کی درخواستوں کو بیچوں میں جمع کریں۔
Android Profiler شروع کرنا ایک کلک سے ہوتا ہے: Android Studio میں View → Tool Windows → Profiler کھولیں یا دائیں پینل میں Profiler آئیکن پر ڈبل کلک کریں۔ منسلک ڈیوائس پر ایپلیکیشن شروع کرنے کے بعد، Android Studio خود بخود عمل سے منسلک ہو جائے گا اور ڈیٹا اکٹھا کرنا شروع کر دے گا۔ ٹائم لائن پر فوری طور پر CPU، Memory، Network اور Energy کے گراف ظاہر ہو جائیں گے۔
تفصیلی تجزیہ کے لیے مطلوبہ ٹیب (CPU، Memory، Network یا Energy) منتخب کریں اور ریکارڈنگ شروع کریں۔ CPU کے لیے میں Sample Java Methods موڈ 30 سیکنڈ کی ریکارڈنگ کی مدت کے ساتھ تجویز کرتا ہوں — یہ عام منظر نامے کے لیے کافی ہے۔ Memory کے لیے — منظر نامے پر عملدرآمد کے بعد ہیپ ڈمپ (Capture Heap Dump)۔ Network کے لیے ریکارڈنگ خود بخود شروع ہو جاتی ہے، منظر نامہ مکمل ہونے کے بعد Stop بٹن دبائیں۔
ریکارڈنگ روکنے کے بعد ڈیٹا برآمد کریں: File → Save As پورے سیشن کو .perf فائل میں محفوظ کرتا ہے۔ یہ اصلاح سے پہلے اور بعد میں میٹرکس کا موازنہ کرنے کے لیے آسان ہے۔ پہلے مستحکم ورژن پر بیس لائن سیشن بنائیں اور ہر نئے سیشن کا اس سے موازنہ کریں — کارکردگی کی تبدیلیوں کا معروضی جائزہ لینے کا یہ واحد طریقہ ہے۔
Android Profiler کو Android Studio CLI اور Firebase Test Lab کے ذریعے کمانڈ لائن سے چلایا جا سکتا ہے۔ Firebase Test Lab UI ٹیسٹ کے حصے کے طور پر کارکردگی کی پروفائلنگ کو سپورٹ کرتا ہے: آپ ٹیسٹ کے نتیجے کے ساتھ CPU، Memory اور Network میٹرکس حاصل کرتے ہیں۔ پائپ لائن کو اس طرح ترتیب دیں کہ جب میٹرکس بیس لائن سے 10% گر جائیں تو CI پائپ لائن ڈویلپر کے چیک کرنے تک بلاک ہو جائے۔
اکثر پوچھے گئے سوالات
اثر کم سے کم ہے۔ Android Profiler ڈیٹا اکٹھا کرنے کے لیے Perfetto استعمال کرتا ہے، جو 1% CPU سے کم اوور ہیڈ شامل کرتا ہے۔ Sample Java Methods موڈ میں اوور ہیڈ تقریباً 3–5% ہے، جو منظر نامے کی پروفائلنگ کے لیے غیر معمولی ہے۔ طریقوں کا مکمل سراغ لگانا 15% تک اوور ہیڈ دے سکتا ہے، اس لیے یہ صرف مختصر ریکارڈنگ کے لیے استعمال ہوتا ہے۔
ہاں، سسٹم ٹریس Perfetto CLI کے ذریعے براہ راست ڈیوائس سے ریکارڈ کیے جا سکتے ہیں: adb shell perfetto --out /data/local/tmp/trace.perf۔ پھر فائل کو Perfetto UI (ui.perfetto.dev) انٹرفیس میں کھولیں یا Android Studio میں درآمد کریں تاکہ ایپلیکیشن کے مکمل مارک اپ کے ساتھ دیکھ سکیں۔
Android Profiler ایک سسٹم ٹول ہے جسے پراکسی کنفیگریشن کی ضرورت نہیں ہے۔ یہ درخواستوں کو براہ راست IDE میں کارکردگی کے تناظر میں دکھاتا ہے۔ Charles Proxy ایک بیرونی پراکسی سرور ہے جو مزید تفصیلی تجزیہ (ٹریفک کی نگرانی، درخواستوں میں ترمیم، دوبارہ بھیجنا) فراہم کرتا ہے۔ کارکردگی کی پروفائلنگ کے لیے Android Profiler استعمال کریں، API معاہدوں کے تجزیہ کے لیے — Charles۔
منظر نامے پر عملدرآمد سے پہلے ہیپ ڈمپ لیں (مثال کے طور پر، Activity کھولنے سے پہلے)۔ منظر نامے پر عمل کریں — Activity کھولیں اور بند کریں۔ دوسرا ڈمپ لیں۔ زندہ Activity مثالوں کی تعداد کا موازنہ کریں: اگر دوسرے ڈمپ میں زیادہ ہیں — رساو۔ Retained Size کے مطابق ترتیب دیں، اضافی Activity تلاش کریں اور وجہ معلوم کرنے کے لیے Reference Tree دیکھیں۔
Energy Profiler کو ڈیوائس کی سطح پر Power Profiles کی حمایت اور Android 8.0+ کی ضرورت ہے۔ ایمولیٹرز اور کچھ فرم ویئر (خاص طور پر چینی) پر ڈیٹا موجود نہیں ہو سکتا۔ حل — خالص Android فرم ویئر والے Pixel یا Samsung ریفرنس ڈیوائسز پر توانائی کی کھپت کو پروفائل کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں