Grupo de rescate

Muchos usuarios dependen en gran medida de sus teléfonos y requieren un dispositivo que funcione en todo momento. Sin embargo, a veces los dispositivos terminan en bucles de reinicio, lo que hace que los usuarios presenten tickets de soporte o consultas de garantía. Este proceso es frustrante para los usuarios y costoso para los fabricantes y operadores de dispositivos.

Android 8.0 incluye una función que envía un "grupo de rescate" cuando nota que los componentes centrales del sistema se atascan en bucles de bloqueo. Rescue Party luego escala a través de una serie de acciones para recuperar el dispositivo. Como último recurso, Rescue Party reinicia el dispositivo en modo de recuperación y solicita al usuario que realice un restablecimiento de fábrica.

Estas funciones de rescate no son requeridas por el Documento de definición de compatibilidad de Android , pero aún pueden ser útiles para reducir los casos de soporte.

Implementación

Rescue Party está habilitado de forma predeterminada en Android 8.0 y la implementación se encuentra en /services/core/java/com/android/server/RescueParty.java . Rescue Party recibe información sobre eventos de arranque y bloqueo y se inicia si:

  • system_server se reinicia más de 5 veces en 5 minutos.
  • Una aplicación de sistema persistente falla más de 5 veces en 30 segundos.

Cuando se detecta una de estas situaciones, Rescue Party escala al siguiente nivel de rescate, procesa la tarea asociada con ese nivel y deja que el dispositivo continúe para ver si se recupera. Cada nivel es progresivamente más agresivo en lo que borra o restablece. El nivel final solicita al usuario que reinicie el dispositivo de fábrica.

No se requiere soporte de hardware especial para admitir Rescue Party. Si se implementa, el sistema de recuperación de un dispositivo debe responder al comando --prompt_and_wipe_data y los dispositivos deben mostrar una forma para que los usuarios confirmen cualquier destrucción de los datos del usuario antes de continuar. El sistema de recuperación también debería darle al usuario la opción de intentar reiniciar su dispositivo nuevamente.

Debido a que cada nivel de rescate puede agregar hasta 5 minutos antes de que un dispositivo vuelva a funcionar, los fabricantes de dispositivos no deben agregar niveles de rescate personalizados. El mayor tiempo con un dispositivo inoperable hace que los usuarios tengan más probabilidades de iniciar una consulta de soporte o garantía en lugar de recuperar su dispositivo por sí mismos.

Validación

Todos los eventos de rescate se suprimen cuando el dispositivo tiene una conexión de datos USB activa porque es una señal fuerte de que alguien está depurando el dispositivo.

Para anular esta supresión, ejecute:

adb shell setprop persist.sys.enable_rescue 1

A partir de ahí, puede desencadenar un bucle de bloqueo del sistema o de la interfaz de usuario.

Para desencadenar un bucle de bloqueo system_server de bajo nivel, ejecute:

adb shell setprop debug.crash_system 1

Para desencadenar un bucle de bloqueo SystemUI de nivel medio, ejecute:

adb shell setprop debug.crash_sysui 1

Ambos bucles de bloqueo inician la lógica de rescate. Todas las operaciones de rescate también se registran en los registros persistentes de PackageManager almacenados en /data/system/uiderrors.txt para su posterior inspección y depuración. Estos registros persistentes también se incluyen en todos los informes de errores en la sección "Mensajes de advertencia del paquete".