ابزارهای دیباگ کردن اپلیکیشن های اندرویدی – راهنمای کاربردی
بهبود کیفیت سرویسها و محصولات یک موضوع بسیار مهم برای صنعت توسعه نرمافزار محسوب میشود. فرایند توسعه شامل بخشهای زیادی است که باید به طور منسجمی به پیش بروند. در این مقاله مستقیماً در مورد دیباگ در اندروید صحبت خواهیم کرد. دیباگ کردن، مهمترین بخش از فرایند توسعه نرمافزار است. برای این که بتوانیم محصول با کیفیت بالایی در اختیار کاربران خود قرار دهیم باید بتوانیم باگها را به سرعت و با زمانبندی مناسب یافته و اصلاح کنیم.
شرکتهای بزرگ نرمافزاری به سختی تلاش میکنند که نه تنها انتظارات مشتریان و شرکای فنی را برآورده سازند بلکه بتوانند از آن نیز جلو بزنند. این شرکتها از ابزارهای دیباگ مختلفی استفاده میکنند که هر کدام مزیتهای خاص خود را دارند. داشتن وابستگیهای زیادی در یک پروژه چیز خوبی نیست و سوئیچ مداوم بین ابزارهای متفاوت برای بازیابی لایههای شبکه و پایگاه داده نیز همین وضعیت را دارد. شرکتها به شدت پیگیر راهحلی هستند که همه نیازهای آنها را برآورده سازد، اما شاید روزی به این نتیجه برسند که بهتر است خودشان ابزار مناسبشان را ابداع کنند.
در مقاله حاضر به بررسی تجربه استفاده از ابزارهای دیباگ زیر میپردازیم و امیدواریم این بررسی به تصمیمگیری شما در مورد انتخاب ابزار مناسب کمک کند.
- Android Profiler : یک پروفایلر برای اندروید استودیو است.
- Facebook Stetho : پل ارتباطی برای اپلیکیشنهای اندرویدی است.
- DebugDrawer : یک درآور برای توسعه سریع است.
- AppSpector : ابزار دیباگ برای اندروید و iOS است.
پروفایلر اندروید استودیو
ابزار پروفایلر اندروید استودیو دادههای لحظهای را برای کمک به پروفایل کردن لایه شبکه و درک شیوه استفاده از CPU، حافظه، و باتری در اپلیکیشن ارائه میکند. از اندروید استودیو نسخه 3.0 به بعد میتوان از سرویس پروفایل کردن پیشرفته استفاده کرد که وقتی فعال میشود که اپلیکیشن روی دستگاههای با اندروید نسخه 7.1 و بالاتر اجرا شود.
قابلیتها
پنجره پروفایلر میزان مصرف CPU، حافظه، شبکه و باتری را نمایش میدهد و ظاهر آن به صورت زیر است:
بازبینی شبکه
اگر روی تایملاین شبکه کلیک کنید، پروفایل اطلاعات تفصیلی در مورد درخواستها را نمایش میدهد.
این پنجره شامل برگه «نمای اتصال» (Connection View) است که لیستی از درخواستها را بر حسب اندازه، زمان، وضعیت، درخواست، پاسخ و زمان نشان میدهد.
بازبینی حافظه
پروفایلر حافظه گرافی از مصرف RAM نشان میدهد و مانند زیر است:
با استفاده از این قابلیت میتوانید تابعهایی را که اشیای اضافی تولید میکنند پیدا کنید و مقدار رویدادهای garbage collection را کاهش دهید.
پروفایل کردن پیشرفته
همچنین میتوانید پیکربندیهای اپلیکیشن خود را ویرایش و اجرا کنید تا گزینه پروفایلینگ پیشرفته را مانند تصویر زیر فعال کنید.
قابلیتهایی که از سوی پروفایلینگ پیشرفته عرضه میشوند، شامل موارد زیر هستند:
- همه پنجرههای پروفایلر از تایملاین رویداد پشتیبانی میکنند.
- پروفایلر حافظه تعداد اشیای تخصیصیافته را نمایش میدهد.
- پروفایلر حافظه رویدادهای garbage collection را نمایش میدهد.
- پروفایلر حافظه جزییاتی در مورد همه فایلهای انتقالیافته نشان میدهد.
معایب و مزایا
پروفایلر اندروید استودیو به صورت آمادهبهکار قابل استفاده است و نیاز نیست که وابستگیهای شخص ثالث را در پروژه خود بگنجانید. مانیتورهای موجود (شبکه، CPU، حافظه، و انرژی) اطلاعات واقعاً جامعی در مورد اپلیکیشن ارائه میکنند. این پیادهسازی مانیتور شبکه بسیار مفید است زیرا میتوان قاب زمانی را روی تایملاین انتخاب کرد و درخواستها را به صورت کامل مورد بررسی قرار داد.
با این حال هیچ پروفایلری برای پایگاه داده وجود ندارد و این بزرگترین عیب این پروفایلر است. این همان نقصی است که موجب میشود به دنبال ابزارهای دیگری از جمله افزونه SQLStout باشیم.
Facebook Stetho
Stetho یک پل ارتباطی برای اندروید است که امکان دسترسی به ابزارهای توسعهدهنده کروم را برای بازبینی اپلیکیشن در اختیار ما قرار میدهد.
یکپارچهسازی
برای دانلود کتابخانه اصلی Stetho در پروژه باید خط زیر را به بلوک dependencies اضافه کنید:
implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.facebook.stetho:stetho-okhttp3:1.5.0'
برای مقداردهی اولیه Stetho باید خط زیر را به متد onCreate کلاس Application اپلیکیشن خود اضافه کنید:
Stetho.initializeWithDefaults(this);
برای این که ;(Stetho.initializeWithDefaults(this بتواند دادههای شبکه را با کلاینت OkHttp نمایش دهد باید یک interceptor مانند مورد زیر اضافه کنید:
1new OkHttpClient.Builder()
2 .addNetworkInterceptor(new StethoInterceptor())
3 .build()
قابلیتها
Stetho امکان بازبینی لایههای شبکه و ذخیرهسازی را در اپلیکیشن شما فراهم میسازد:
بدین ترتیب میتوان با استفاده از برگهها بین ابزارهای بازبینی مختلف سوئیچ کرد.
بازبینی شبکه
برگه Network جدولی را نشان میدهد که در آن درخواستها به صورت زیر نمایش پیدا میکنند:
این جدول وضعیت، نوع، زمان، اندازه و متد هر درخواست را نشان میدهد. برای دریافت اطلاعات تکمیلی میتوان روی هر ردیف کلیک کرد:
بازبینی پایگاه داده
برگه Resource جدول SQLite اپلیکیشن شما را به صورت تصویر زیر نشان میدهد:
این پنجره یک جدول ساده بدون امکان جستجو صفحهبندی است. این جدول میتواند شامل باگ باشد، برای نمونه در تصویر فوق میتوانید دو ستون id ببینید.
پروژه نمونه
میتوانید پروژه نمونه را در این لینک (+) مشاهده کنید.
مزایا و معایب
Stetho ابزار رایگانی است که امکان بازبینی لایههای شبکه و ذخیرهسازی را میدهد. همچنین میتوانید کتابخانه Stetho-Realm را برای بررسی پایگاه داده Realm نصب کنید. Stetho رایگان و با کاربری آسان است اما شامل باگ است و رابط کاربری آن زشت بوده و کارکرد ضعیفی دارد.
DebugDrawer
کتابخانههای زیادی وجود دارند که امکان یکپارچهسازی درآور ناوبری قابل پیکربندی را در اپلیکیشن فراهم میسازند. همه آنها کارکرد مشابهی دارند.
یکپارچهسازی
برای دانلود DebugDrawer باید خط زیر را به بلوک dependencies فایل build.gradle اضافه کنید:
debugImplementation ‘io.palaima.debugdrawer:debugdrawer:0.8.0’
همچنین میتوانید کارکرد درآور ناوبری را با افزودن ماژولهای مختلف به پروژه پیکربندی کنید. برای نمونه اگر بخواهید لایه شبکه اپلیکیشن خود را با افزودن خط زیر پیکربندی کنید:
implementation 'io.palaima.debugdrawer:debugdrawer-okhttp3:0.8.0'
برای مقداردهی DebugView باید خطوط زیر را به متد onCreate در Actibity خود اضافه کنید:
1SwitchAction switchAction = new SwitchAction("Test switch", new SwitchAction.Listener() {
2 @Override
3 public void onCheckedChanged(boolean value) {
4 Toast.makeText(MainActivity.this, "Switch checked", Toast.LENGTH_LONG).show();
5 }
6});
7
8ButtonAction buttonAction = new ButtonAction("Test button", new ButtonAction.Listener() {
9 @Override
10 public void onClick() {
11 Toast.makeText(MainActivity.this, "Button clicked", Toast.LENGTH_LONG).show();
12 }
13});
14
15SpinnerAction < String > spinnerAction = new SpinnerAction < > (
16 Arrays.asList("First", "Second", "Third"),
17 new SpinnerAction.OnItemSelectedListener < String > () {
18 @Override public void onItemSelected(String value) {
19 Toast.makeText(MainActivity.this, "Spinner item selected - " + value, Toast.LENGTH_LONG).show();
20 }
21 }
22);
23
24debugDrawer = new DebugDrawer.Builder(this)
25 .modules(
26 new ActionsModule(switchAction, buttonAction, spinnerAction),
27 new FpsModule(Takt.stock(getApplication())),
28 new LocationModule(this),
29 new ScalpelModule(this),
30 new TimberModule(),
31 new OkHttp3Module(okHttpClient),
32 new PicassoModule(picasso),
33 new GlideModule(Glide.get(getContext())),
34 new DeviceModule(this),
35 new BuildModule(this),
36 new NetworkModule(this),
37 new SettingsModule(this)
38 ).build();
قابلیتها
درآور دیباگ ناوبری بسته به پیکربندی شما ممکن است به صورت زیر نمایان شود:
DebugDrawer امکان بررسی سریع اطلاعاتی در مورد دستگاه، تغییر دادن تنظیمات یا شبیهسازی مکان را میدهد.
بازبینی شبکه
DebugView در پسزمینه از کتابخانه Chuck استفاده میکند و امکان بازبینی درخواستهای شبکه را فراهم میسازد.
کتابخانه Chuck فهرستی از همه درخواستها را نمایش میدهد و امکان بررسی جزییات را فراهم میسازد.
پروژه نمونه
برای دانلود پروژه نمونه به این صفحه (+) مراجعه کنید.
مزایا و معایب
DebugDrawer دسترسی سریعی به اطلاعات و تنظیمات دستگاه را فراهم میسازد و به شما اجازه میدهد که وضعیت مکان و اتصال شبکه را شبیهسازی کنید. بدین ترتیب فرایند تست کردن ساده میشود، اما بازبینی درخواست شبکه روی صفحه یک دستگاه موبایل دشوار است. همچنین کارکردی برای بازبینی لایه پایگاه داده تعبیه نشده است.
AppSpector
AppSpector یک سرویس برای دیباگ کردن اپلیکیشنهای iOS و اندروید است. که امکان بازبینی و کنترل اپلیکیشنها را از راه دور به صوت همزمان و با استفاده از یک رابط ساده فراهم میکند. برای مطالعه بیشتر به مستندات (+) کامل آن مراجعه کنید.
یکپارچهسازی
برای آغاز کار با AppSpector باید یک فرم ثبت نام ساده را پر کنید و پروژه خود را ایجاد یا یک سازمان اضافه کنید. برای یکپارچهسازی AppSpector در اپلیکیشن باید فایل build.gradle را به صورت زیر تغییر دهید:
1buildscript {
2 repositories {
3 jcenter()
4 google()
5 maven {
6 url "https://maven.appspector.com/artifactory/android-sdk"
7 }
8 }
9
10 dependencies {
11 classpath "com.appspector:android-sdk-plugin:1.+"
12 }
13}
14
15apply plugin: 'com.android.application'
16// Put AppSpector plugin after Android plugin
17apply plugin: 'com.appspector.sdk'
18
19repositories {
20 maven {
21 url "https://maven.appspector.com/artifactory/android-sdk"
22 }
23}
24
25dependencies {
26 implementation "com.appspector:android-sdk:1.+"
27}
برای مقداردهی AppSpector در متد onCreate در کلاس Application اپلیکیشن به صورت زیر عمل کنید:
1AppSpector
2 .build(this)
3 .withDefaultMonitors() .run("android_OGMyYzA3NGYtNDkxNy00ZWRiLTgxOTktNjQ5YjIzMTZjOWM4");
قابلیتها
زمانی که اپلیکیشنتان را اجرا میکنید یک نشست جدید ایجاد میشود و آن را میتوانید در پنجره اصلی AppSpector در مرورگر مشاهده کنید.
زمانی که روی نشست خاصی کلیک کنید، میتوانید اپلیکیشنتان را با استفاده از مانیتورهای متفاوت بازبینی کنید.
بازبینی عملکرد
پنجره Performance گرافهایی با معیارهای مختلف مانند CPU، حافظه، شبکه، دیسک، FPS و مصرف باتری نمایش میدهد.
این مانیتور به تشخیص نشت منابع، مصرف دیسک و FPS کمک میکند.
بازبینی شبکه
مانیتور Network جدولی نمایش میدهد که در آن درخواستها وجود دارند و بدین ترتیب میتوانید روی ردیف خاصی کلیک کرده و اطلاعات تکمیلی در مورد هر درخواست و پاسخ آن را مشاهده کنید.
این پنجره شامل کارکردهای جستجو، فیلتر و اکسپورت نیز هست.
در صورتی که اپلیکیشن بزرگی داشته باشید، استفاده از آن همچنان کاملاً آسان خواهد بود.
بازبینی پایگاه داده
مانیتور SQLite امکان بازبینی یک پایگاه داده و فراخوانی درخواستهای SQL را میدهد.
جستجوی یک رکورد خاص کاملاً آسان است، زیرا این مانیتور شامل قابلیت صفحهبندی مفیدی است.
مزایا و معایب
AppSpector رابط کاربری کاملی دارد. ناوبری در این برنامه و یافتن مانیتور مورد نیاز کاملاً آسان است. شما میتوانید نشست خود را با کپی کردن آدرس URL از مرورگر و ارسال کردن آن، با همتیمیها به اشتراک بگذارید. نشست مشترک در دسترس همه اعضا در یک سازمان خواهد بود. AppSpector مانیتورهای کاملاً مختلفی با گزینههای کارآمد جستجو فیلتر دارد. دوره استفاده آزمایشی رایگان 14 روز است. AppSpector از هر دو پلتفرم iOS و اندروید پشتیبانی میکند.
سخن پایانی
بدین ترتیب به پایان این راهنما در مورد ابزارهای دیباگ کردن اندروید رسیدیم. در این نوشته به اشتراک تجربیات در مورد کاربرد پروفایلرها پرداختیم و توضیح دادیم که چرا باید تلاش کنیم خودمان یکی از آنها را بسازیم.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی اندروید
- گنجینه برنامه نویسی اندروید (Android)
- مجموعه آموزشهای برنامهنویسی
- ۵ گام ضروری برای یادگیری برنامهنویسی اندروید — راهنمای جامع
- دیباگ کرش نیتیو (Native Crash) در اندروید — راهنمای پیشرفته
==