مهمانی نجات

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

اندروید ۸.۰ (سطح API ۲۶) و بالاتر شامل ویژگی‌ای است که هنگام تشخیص اجزای اصلی سیستم که در حلقه‌های خرابی گیر کرده‌اند، یک فرآیند نجات را آغاز می‌کند. با دریافت این سیگنال، ویژگی Rescue Party از طریق مجموعه‌ای از اقدامات برای بازیابی دستگاه تشدید می‌شود. به عنوان آخرین راه حل، Rescue Party دستگاه را در حالت ریکاوری راه‌اندازی مجدد می‌کند و از کاربر می‌خواهد که تنظیمات کارخانه را بازنشانی کند.

پیاده‌سازی

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

  • system_server در عرض پنج دقیقه بیش از پنج بار مجدداً راه‌اندازی می‌شود.
  • یک برنامه سیستمی مداوم بیش از پنج بار در 30 ثانیه از کار می‌افتد.

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

Rescue Party به پشتیبانی سخت‌افزاری خاصی نیاز ندارد. در صورت پیاده‌سازی، سیستم بازیابی دستگاه باید به دستور --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

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