Fête de sauvetage

De nombreux utilisateurs dépendent beaucoup de leur téléphone et ont besoin d'un appareil opérationnel. en temps réel. Cependant, il arrive que les appareils se retrouvent dans des boucles de redémarrage, ce qui amène les utilisateurs déposer des demandes d'assistance ou des demandes de garantie. Ce processus est frustrant pour utilisateurs et coûteux pour les fabricants d’appareils et les opérateurs.

Android 8.0 inclut une fonctionnalité qui lance une "partie de sauvetage" lorsqu'il remarque les principaux composants du système bloqués dans des boucles de plantage. La partie de secours fait ensuite remonter le problème via une série d’actions pour récupérer l’appareil. En dernier recours, Rescue Party redémarre l'appareil en mode Recovery et invite l'utilisateur à rétablir la configuration d'usine. réinitialisés.

Ces fonctionnalités de secours ne sont pas nécessaires à l'application Android document de définition de compatibilité, mais cela peut tout de même s'avérer utile pour réduire le nombre de demandes d'assistance.

Implémentation

Rescue Party est activée par défaut dans Android 8.0 et se trouve dans /services/core/java/com/android/server/RescueParty.java Le service de secours reçoit des informations sur les événements de démarrage et de plantage, et démarre si:

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

Lorsqu'une de ces situations est détectée, la partie de secours fait remonter l'information au niveau de secours, traite la tâche associée à ce niveau et laisse l'appareil continuez pour voir s'il se rétablit. Chaque niveau est progressivement plus agressif dans ce qu'il efface ou réinitialise. Le dernier niveau invite l'utilisateur à rétablir la configuration d'usine appareil.

Aucune assistance matérielle spéciale n'est requise pour gérer Rescue Party. Si elle est implémentée, 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 en cours. Le système de récupération doit également donner à l'utilisateur la possibilité de redémarrer son appareil.

Parce que chaque niveau de secours peut cumuler jusqu'à 5 minutes avant qu'un appareil puisse être utilisé Là encore, les fabricants d'appareils ne doivent pas ajouter de niveaux de sauvetage personnalisés. Temps supplémentaire avec un appareil inutilisable, les utilisateurs sont plus susceptibles de lancer une demande d’assistance ou au lieu de récupérer lui-même son appareil.

Validation

Tous les événements de secours sont supprimés lorsque des données USB sont actives sur l'appareil connexion, car c'est un signal fort que quelqu'un est en train de déboguer l'appareil.

Pour ignorer cette suppression, exécutez la commande suivante:

adb shell setprop persist.sys.enable_rescue 1

Vous pouvez alors déclencher une boucle de plantage du système ou de l'interface utilisateur.

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 de l'UI système 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 consignés dans les journaux persistants 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 bug dans la section "Package messages d'avertissement" .