Fête de sauvetage

De nombreux utilisateurs dépendent fortement de leur téléphone et ont besoin d’un appareil fonctionnel à tout moment. Cependant, les appareils se retrouvent parfois dans des boucles de redémarrage, ce qui oblige les utilisateurs à déposer des tickets 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'il remarque des composants centraux du système bloqués dans des boucles de crash. Rescue Party passe ensuite à une série d’actions pour récupérer l’appareil. En dernier recours, Rescue Party redémarre l'appareil en mode de récupération et invite l'utilisateur à effectuer une réinitialisation d'usine.

Ces fonctionnalités de secours ne sont pas requises par le document de définition de compatibilité Android , mais peuvent néanmoins être utiles pour réduire les cas de support.

Mise en œuvre

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 crash et démarre si :

  • Le system_server redémarre plus de 5 fois en 5 minutes.
  • Une application système persistante plante plus de 5 fois en 30 secondes.

Lorsqu'une de ces situations est détectée, Rescue Party passe au niveau de secours suivant, traite la tâche associée à ce niveau et laisse l'appareil continuer pour voir s'il récupère. Chaque niveau est progressivement plus agressif dans ce qu'il efface ou réinitialise. Le niveau final invite l'utilisateur à réinitialiser l'appareil aux paramètres d'usine.

Aucune prise en charge matérielle spéciale n'est requise pour prendre en charge Rescue Party. S'il est mis en œuvre, 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 donner à l'utilisateur la possibilité de tenter de redémarrer son appareil.

Étant donné que chaque niveau de secours peut prendre jusqu'à 5 minutes avant qu'un appareil soit à nouveau opérationnel, les fabricants d'appareils ne doivent pas ajouter de niveaux de secours personnalisés. L'augmentation du temps passé avec un appareil inutilisable rend les utilisateurs plus susceptibles de lancer une demande d'assistance ou de garantie au lieu de récupérer 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 est en train de déboguer l'appareil.

Pour remplacer cette suppression, exécutez :

adb shell setprop persist.sys.enable_rescue 1

À partir de là, vous pouvez déclencher une boucle de crash du système ou de l’interface utilisateur.

Pour déclencher une boucle de crash system_server de bas niveau, exécutez :

adb shell setprop debug.crash_system 1

Pour déclencher une boucle de crash SystemUI de niveau intermédiaire, exécutez :

adb shell setprop debug.crash_sysui 1

Les deux boucles de crash lancent la logique de sauvetage. Toutes les opérations de sauvetage sont également enregistrées dans les journaux persistants de PackageManager 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 bogue dans la section « Messages d'avertissement du package ».