Rescue Party

يعتمد المستخدمون على هواتفهم ويحتاجون إلى جهاز يعمل في جميع الأوقات. ومع ذلك، في بعض الأحيان، تدخل الأجهزة في حلقات إعادة تشغيل متكررة، ما يدفع المستخدمين إلى تقديم طلبات دعم أو استفسارات بشأن الضمان. وهذه العملية محبطة للمستخدمين ومكلفة لمصنّعي الأجهزة ومشغّلي شبكات الجوّال.

يتضمّن نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) والإصدارات الأحدث ميزة تؤدي إلى تشغيل عملية إنقاذ عند رصد تعذُّر عمل المكوّنات الأساسية للنظام بشكل متكرّر. عند تلقّي هذه الإشارة، تتصاعد ميزة "فريق الإنقاذ" من خلال سلسلة من الإجراءات لاسترداد الجهاز. كحلّ أخير، يعيد تطبيق Rescue Party تشغيل الجهاز في وضع الاسترداد (Recovery mode) ويطلب من المستخدم إجراء إعادة الضبط على الإعدادات الأصلية.

التنفيذ

تكون ميزة "مجموعة الإنقاذ" مفعَّلة تلقائيًا ويتم تنفيذها في /services/core/java/com/android/server/RescueParty.java. يتلقّى تطبيق Rescue Party معلومات حول أحداث إعادة التشغيل والتعطُّل ويبدأ في الحالات التالية:

  • تتم إعادة تشغيل system_server أكثر من خمس مرات في خمس دقائق.
  • تعطُّل أحد تطبيقات النظام الدائمة أكثر من خمس مرات خلال 30 ثانية

عندما يرصد تطبيق Rescue Party إحدى هذه الحالات، ينتقل إلى مستوى الإنقاذ التالي، ويعالج المهمة المرتبطة بهذا المستوى، ويسمح للجهاز بالمتابعة لمعرفة ما إذا كان سيسترد عافيته. ويزداد مستوى الحذف أو إعادة الضبط مع كل مستوى. يطلب المستوى الأخير من المستخدم إعادة الضبط على الإعدادات الأصلية للجهاز.

لا تتطلّب ميزة "حفل الإنقاذ" توفير أجهزة خاصة. في حال تنفيذ ذلك، يجب أن يستجيب نظام الاسترداد في الجهاز للأمر --prompt_and_wipe_data، ويجب أن توفّر الأجهزة طريقة للمستخدمين لتأكيد أي إتلاف لبيانات المستخدم قبل المتابعة. يجب أن يتيح نظام الاسترداد للمستخدم أيضًا خيار محاولة تشغيل الجهاز مرة أخرى.

بما أنّ كل مستوى إنقاذ يمكن أن يضيف ما يصل إلى خمس دقائق قبل أن يصبح الجهاز قابلاً للتشغيل مرة أخرى، يجب ألا يضيف مصنّعو الأجهزة مستويات إنقاذ مخصّصة. وكلما طالت مدة تعذُّر استخدام الجهاز، زادت احتمالية أن يتواصل المستخدمون مع فريق الدعم أو يسألوا عن الضمان بدلاً من محاولة إصلاح الجهاز بأنفسهم.

التحقُّق

تتجاهل ميزة Rescue Party جميع أحداث الإنقاذ عندما يكون الجهاز مزوّدًا باتصال نشط لنقل بيانات USB، لأنّ ذلك يشير بوضوح إلى أنّ أحد المستخدمين يعمل على تصحيح أخطاء الجهاز.

لتجاوز هذا الحظر، نفِّذ ما يلي:

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 لتسهيل فحصها وتصحيح أخطائها لاحقًا. تتضمّن تقارير الأخطاء أيضًا هذه السجلات الدائمة ضمن قسم رسائل التحذير بشأن الحِزم.