Los usuarios dependen de sus teléfonos y necesitan 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 asistencia o consultas sobre la garantía. Este proceso es frustrante para los usuarios y costoso para los fabricantes y operadores de dispositivos.
Android 8.0 (nivel de API 26) y versiones posteriores incluyen una función que activa un proceso de rescate cuando detecta componentes principales del sistema bloqueados en bucles de falla. En esta señal, la función Grupo de rescate aumenta a través de una serie de acciones para recuperar el dispositivo. Como último recurso, Grupo de rescate reinicia el dispositivo en modo de recuperación y le solicita al usuario que restablezca la configuración de fábrica.
Implementación
Grupo de rescate está habilitado de forma predeterminada y la implementación se encuentra en /services/core/java/com/android/server/RescueParty.java. Grupo de rescate recibe información sobre eventos de arranque y fallas, y se inicia si sucede lo siguiente:
- El
system_serverse reinicia más de cinco veces en cinco minutos. - Una app del sistema persistente falla más de cinco veces en 30 segundos.
Cuando Grupo de rescate detecta una de estas situaciones, aumenta 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 progresivamente más agresivo en lo que borra o restablece. El nivel final le solicita al usuario que restablezca la configuración de fábrica del dispositivo.
Grupo de rescate no requiere compatibilidad especial con el hardware. Si se implementa, el sistema de recuperación de un dispositivo debe responder al comando --prompt_and_wipe_data, y los dispositivos deben proporcionar 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 volver a iniciar su dispositivo.
Debido a que cada nivel de rescate puede agregar hasta cinco minutos antes de que un dispositivo vuelva a funcionar, los fabricantes de dispositivos no deben agregar niveles de rescate personalizados. El aumento del tiempo con un dispositivo inoperable hace que los usuarios tengan más probabilidades de iniciar una consulta de asistencia o garantía en lugar de recuperar el dispositivo por sí mismos.
Validación
Grupo de rescate suprime todos los eventos de rescate cuando el dispositivo tiene una conexión de datos USB activa, ya que es una señal fuerte de que alguien está depurando el dispositivo.
Para anular esta supresión, ejecuta lo siguiente:
adb shell setprop persist.sys.enable_rescue 1Luego, activa un bucle de falla del sistema o de la IU:
Para activar un bucle de falla de
system_serverde nivel bajo, ejecuta lo siguiente:adb shell setprop debug.crash_system 1adb shell stopadb shell startPara 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 rescate. Grupo de rescate también registra todas las operaciones de rescate en los registros persistentes de PackageManager almacenados en /data/system/uiderrors.txt para su inspección y depuración posteriores. Los informes de errores también incluyen estos registros persistentes en la sección Mensajes de advertencia del paquete.