بسیاری از کاربران به شدت به تلفن های خود وابسته هستند و همیشه به یک دستگاه کار نیاز دارند. با این حال، گاهی اوقات دستگاهها در حلقههای راهاندازی مجدد قرار میگیرند، که باعث میشود کاربران بلیطهای پشتیبانی یا درخواستهای گارانتی را ارسال کنند. این فرآیند برای کاربران خسته کننده و برای سازندگان و حامل های دستگاه گران است.
اندروید 8.0 دارای قابلیتی است که وقتی متوجه میشود اجزای اصلی سیستم در حلقههای خرابی گیر کردهاند، یک «پارتی نجات» را ارسال میکند. سپس Rescue Party از طریق یک سری اقدامات برای بازیابی دستگاه تشدید می شود. به عنوان آخرین راه حل، Rescue Party دستگاه را به حالت بازیابی مجدد راه اندازی می کند و از کاربر می خواهد که بازنشانی کارخانه ای را انجام دهد.
این ویژگیهای نجات توسط سند تعریف سازگاری Android مورد نیاز نیستند، اما ممکن است همچنان برای کاهش موارد پشتیبانی مفید باشند.
پیاده سازی
Rescue Party به طور پیشفرض در Android 8.0 فعال است و پیادهسازی در /services/core/java/com/android/server/RescueParty.java
اجرا میشود. Rescue Party اطلاعاتی در مورد رویدادهای بوت و خرابی دریافت می کند و اگر:
- system_server بیش از 5 بار در 5 دقیقه راه اندازی مجدد می شود.
- یک برنامه سیستمی دائمی بیش از 5 بار در 30 ثانیه از کار می افتد.
هنگامی که یکی از این موقعیتها شناسایی شد، Rescue Party به سطح نجات بعدی افزایش مییابد، وظیفه مرتبط با آن سطح را پردازش میکند و به دستگاه اجازه میدهد تا ببیند آیا بازیابی میشود یا خیر. هر سطح به تدریج در مواردی که پاک یا بازنشانی می کند، تهاجمی تر می شود. سطح نهایی از کاربر می خواهد که دستگاه را به حالت کارخانه بازنشانی کند.
برای پشتیبانی از Rescue Party نیازی به پشتیبانی سخت افزاری خاصی نیست. در صورت پیادهسازی، سیستم بازیابی دستگاه باید به دستور --prompt_and_wipe_data
پاسخ دهد و دستگاهها باید راهی را ارائه دهند تا کاربران قبل از ادامه هرگونه تخریب دادههای کاربر را تأیید کنند. سیستم بازیابی همچنین باید به کاربر این امکان را بدهد که دوباره دستگاه خود را بوت کند.
از آنجایی که هر سطح نجات می تواند تا 5 دقیقه قبل از اینکه یک دستگاه دوباره کار کند، اضافه می کند، سازندگان دستگاه نباید سطوح نجات سفارشی را اضافه کنند. افزایش زمان با یک دستگاه غیرقابل کار باعث می شود کاربران به جای بازیابی خود دستگاه خود، درخواست پشتیبانی یا گارانتی را آغاز کنند.
اعتبار سنجی
وقتی دستگاه دارای اتصال داده USB فعال باشد، همه رویدادهای نجات سرکوب میشوند، زیرا این یک سیگنال قوی است که نشان میدهد شخصی دستگاه را اشکالزدایی میکند.
برای لغو این سرکوب، اجرا کنید:
adb shell setprop persist.sys.enable_rescue 1
از آنجا، می توانید یک حلقه خرابی سیستم یا رابط کاربری را راه اندازی کنید.
برای راه اندازی یک حلقه خرابی سطح پایین system_server
، اجرا کنید:
adb shell setprop debug.crash_system 1
برای راه اندازی حلقه خرابی SystemUI سطح متوسط، اجرا کنید:
adb shell setprop debug.crash_sysui 1
هر دو حلقه تصادف منطق نجات را آغاز می کنند. تمام عملیات نجات همچنین در لاگ های پایدار PackageManager ذخیره شده در /data/system/uiderrors.txt
برای بازرسی و اشکال زدایی بعدی ثبت می شوند. این گزارشهای دائمی همچنین در هر گزارش اشکال در بخش «پیامهای هشدار بسته» گنجانده شدهاند.