گروه نجات

کاربران به تلفن‌هایشان وابسته هستند و همیشه به دستگاهی کارآمد نیاز دارند. بااین‌حال، گاهی اوقات دستگاه‌ها در حلقه‌های بازراه‌اندازی گیر می‌کنند که باعث می‌شود کاربران درخواست پشتیبانی یا پرسش‌های مربوط به ضمانت‌نامه ثبت کنند. این فرایند برای کاربران ناامیدکننده و برای تولیدکنندگان دستگاه و شرکت‌های مخابراتی پرهزینه است.

‫Android 8.0 (سطح API 26) و نسخه‌های بالاتر دارای ویژگی‌ای است که وقتی تشخیص می‌دهد اجزای اصلی سیستم در حلقه‌های خرابی گیر کرده‌اند، فرایند نجات را راه‌اندازی می‌کند. در این نشان، ویژگی «گروه نجات» ازطریق مجموعه‌ای از کنش‌ها برای بازیابی دستگاه اقدام می‌کند. به‌عنوان آخرین راه‌حل، Rescue Party دستگاه را در حالت بازیابی بازراه‌اندازی می‌کند و از کاربر می‌خواهد بازنشانی کارخانه‌ای انجام دهد.

پیاده‌سازی

«مهمانی نجات» به‌طور پیش‌فرض فعال است و پیاده‌سازی در /services/core/java/com/android/server/RescueParty.java قرار دارد. ‫Rescue Party اطلاعات مربوط به رویدادهای راه‌اندازی و خرابی را دریافت می‌کند و در شرایط زیر شروع می‌شود:

  • ‫system_server بیش‌از پنج بار در پنج دقیقه بازراه‌اندازی می‌شود.
  • برنامه سیستم پایداری بیش‌از پنج بار در ۳۰ ثانیه از کار می‌افتد.

وقتی «حزب نجات» یکی از این وضعیت‌ها را تشخیص می‌دهد، به سطح نجات بعدی ارتقا می‌یابد، وظیفه مرتبط با آن سطح را پردازش می‌کند، و به دستگاه اجازه می‌دهد ادامه دهد تا ببیند آیا بازیابی می‌شود یا نه. هر سطح به‌تدریج در پاک کردن یا بازنشانی کردن تهاجمی‌تر می‌شود. در سطح نهایی، از کاربر خواسته می‌شود دستگاه را بازنشانی کارخانه‌ای کند.

«مهمانی نجات» به پشتیبانی سخت‌افزاری ویژه نیاز ندارد. اگر پیاده‌سازی شود، سیستم بازیابی دستگاه باید به فرمان --prompt_and_wipe_data پاسخ دهد و دستگاه‌ها باید روشی برای کاربران فراهم کنند تا قبل‌از ادامه دادن، هرگونه نابودی داده‌های کاربر را تأیید کنند. سیستم بازیابی باید به کاربر این امکان را بدهد که دوباره دستگاهش را راه‌اندازی کند.

ازآنجایی‌که هر سطح نجات می‌تواند تا پنج دقیقه به زمان قبل‌از قابل‌کار شدن دوباره دستگاه اضافه کند، سازندگان دستگاه نباید سطوح نجات سفارشی اضافه کنند. افزایش زمان با دستگاه غیرقابل‌کاربر باعث می‌شود کاربران به‌جای اینکه خودشان دستگاهشان را بازیابی کنند، احتمال بیشتری دارد که درخواست پشتیبانی یا ضمانت‌نامه ثبت کنند.

اعتبارسنجی

وقتی دستگاه اتصال داده USB فعال دارد، Rescue Party همه رویدادهای نجات را سرکوب می‌کند زیرا این نشانه‌ای قوی است که فردی درحال اشکال‌زدایی دستگاه است.

برای لغو این توقف، این دستور را اجرا کنید:

adb shell setprop persist.sys.enable_rescue 1

از آنجا، حلقه ازکارافتادن سیستم یا میانای کاربر را راه‌اندازی کنید:

  • برای راه‌اندازی حلقه ازکارافتادگی system_server سطح پایین، این دستور را اجرا کنید:

    adb shell setprop debug.crash_system 1
    adb shell stop
    adb shell start
  • برای راه‌اندازی حلقه خرابی SystemUI سطح متوسط، این دستور را اجرا کنید:

    adb shell setprop debug.crash_sysui 1

هر دو حلقه خرابی منطق نجات را آغاز می‌کنند. «مهمانی نجات» همچنین همه عملیات نجات را در گزارش‌های دائمی «مدیر بسته» که در /data/system/uiderrors.txt ذخیره شده است ثبت می‌کند تا بعداً بازرسی و اشکال‌زدایی شود. گزارش‌های اشکال همچنین شامل این گزارش‌های ماندگار در بخش پیام‌های هشدار بسته می‌شود.