De nombreux utilisateurs dépendent fortement de leur téléphone et ont besoin d'un appareil en état de fonctionnement en permanence. Toutefois, il arrive que les appareils se retrouvent dans des boucles de redémarrage, ce qui conduit les utilisateurs à envoyer des demandes d'assistance ou des demandes de garantie. Ce processus est frustrant pour les utilisateurs et coûteux pour les fabricants d'appareils et les opérateurs.
Android 8.0 inclut une fonctionnalité qui envoie une "équipe de secours" lorsqu'elle remarque que des composants système de base sont bloqués dans des boucles de plantage. L'équipe de secours effectue ensuite une série d'actions pour récupérer l'appareil. En dernier recours, Rescue Party redémarre l'appareil en mode récupération et invite l'utilisateur à rétablir la configuration d'usine.
Ces fonctionnalités de secours ne sont pas requises par le document de définition de la compatibilité Android, mais elles peuvent tout de même être utiles pour réduire le nombre de demandes d'assistance.
Implémentation
Rescue Party est activé par défaut dans Android 8.0, et l'implémentation se trouve dans /services/core/java/com/android/server/RescueParty.java
.
Rescue Party reçoit des informations sur les événements de démarrage et de plantage, et démarre si:
- Le système_server redémarre plus de cinq fois en cinq minutes.
- Une application système persistante plante plus de cinq fois en 30 secondes.
Lorsqu'une de ces situations est détectée, Rescue Party passe au niveau de récupération suivant, traite la tâche associée à ce niveau et laisse l'appareil continuer pour voir s'il se rétablit. Chaque niveau est progressivement plus agressif dans ce qu'il efface ou réinitialise. Le niveau final invite l'utilisateur à rétablir la configuration d'usine de l'appareil.
Aucune compatibilité matérielle particulière n'est requise pour utiliser Rescue Party. Le cas échéant, le système de récupération d'un appareil doit répondre à la commande --prompt_and_wipe_data
, et les appareils doivent proposer aux utilisateurs un moyen de confirmer toute destruction de données utilisateur avant de continuer. Le système de récupération doit également permettre à l'utilisateur de tenter de redémarrer son appareil.
Étant donné que chaque niveau de récupération peut ajouter jusqu'à cinq minutes avant qu'un appareil ne soit à nouveau opérationnel, les fabricants d'appareils ne doivent pas ajouter de niveaux de récupération personnalisés. Plus le temps passé avec un appareil inutilisable est long, plus les utilisateurs sont susceptibles de lancer une demande d'assistance ou de garantie au lieu de réparer eux-mêmes leur appareil.
Validation
Tous les événements de secours sont supprimés lorsque l'appareil dispose d'une connexion de données USB active, car cela indique clairement que quelqu'un déboogue l'appareil.
Pour ignorer cette suppression, exécutez la commande suivante:
adb shell setprop persist.sys.enable_rescue 1
Vous pouvez ensuite déclencher une boucle de plantage du système ou de l'UI.
Pour déclencher une boucle de plantage system_server
de bas niveau, exécutez la commande suivante:
adb shell setprop debug.crash_system 1
Pour déclencher une boucle de plantage SystemUI de niveau intermédiaire, exécutez la commande suivante:
adb shell setprop debug.crash_sysui 1
Les deux boucles de plantage lancent la logique de secours. Toutes les opérations de sauvetage sont également enregistrées dans les journaux PackageManager persistants stockés dans /data/system/uiderrors.txt
pour une inspection et un débogage ultérieurs.
Ces journaux persistants sont également inclus dans chaque rapport de bug, sous la section "Messages d'avertissement du package".