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 envíen tickets de asistencia 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 "equipo de rescate" cuando detecta que los componentes principales del sistema están atascados en bucles de falla. Luego, la función Grupo de rescate aumenta 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 le solicita al usuario que realice un restablecimiento de la configuración de fábrica.
El Documento de definición de compatibilidad de Android no requiere estas funciones de recuperación, pero pueden ser útiles para reducir los casos de asistencia.
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 inicio y fallas, y se inicia en los siguientes casos:
- El sistema_servidor se reinicia más de 5 veces en 5 minutos.
- Una app del sistema persistente falla más de 5 veces en 30 segundos.
Cuando se detecta una de estas situaciones, Rescue Party deriva el caso al siguiente nivel de rescate, procesa la tarea asociada con ese nivel y permite que el dispositivo continúe para ver si se recupera. Cada nivel es cada vez más agresivo en lo que borra o restablece. En el nivel final, se le solicita al usuario que restablezca la configuración de fábrica del dispositivo.
No se requiere compatibilidad con hardware especial para usar 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 datos del usuario antes de continuar. El sistema de recuperación también debe darle al usuario la opción de intentar reiniciar el dispositivo.
Debido a que cada nivel de recuperación puede agregar hasta 5 minutos antes de que un dispositivo vuelva a funcionar, los fabricantes de dispositivos no deben agregar niveles de recuperación personalizados. El aumento del tiempo con un dispositivo inoperable aumenta las probabilidades de que los usuarios inicien una consulta de asistencia o garantía en lugar de intentar recuperar el dispositivo por su cuenta.
Validación
Todos los eventos de recuperación se suprimen cuando el dispositivo tiene una conexión de datos USB activa, ya que es una señal clara de que alguien está depurando el dispositivo.
Para anular esta supresión, ejecuta lo siguiente:
adb shell setprop persist.sys.enable_rescue 1
Desde allí, puedes activar un bucle de falla del sistema o de la IU.
Para activar un bucle de falla de system_server
de bajo nivel, ejecuta lo siguiente:
adb shell setprop debug.crash_system 1
Para activar un bucle de falla de SystemUI de nivel medio, ejecuta lo siguiente:
adb shell setprop debug.crash_sysui 1
Ambos bucles de falla inician la lógica de recuperación. Todas las operaciones de recuperación también se registran en los registros persistentes de PackageManager almacenados en /data/system/uiderrors.txt
para su inspección y depuración posteriores.
Estos registros persistentes también se incluyen en cada informe de errores en la sección "Mensajes de advertencia del paquete".