Rescue Party

Les utilisateurs dépendent de leur téléphone et ont besoin d'un appareil fonctionnel à tout moment. Cependant, il arrive que les appareils se retrouvent dans des boucles de redémarrage, ce qui oblige les utilisateurs à envoyer 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 (niveau d'API 26) et versions ultérieures incluent une fonctionnalité qui déclenche un processus de récupération lorsqu'elle détecte des composants système principaux bloqués dans des boucles de plantage. À ce signal, la fonctionnalité Rescue Party passe par 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.

Implémentation

Rescue Party est activé par défaut 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 system_server redémarre plus de cinq fois en cinq minutes ;
  • une application système persistante plante plus de cinq fois en 30 secondes.

Lorsque Rescue Party détecte l'une de ces situations, il 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 récupère. 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 de l'appareil.

Rescue Party ne nécessite pas de compatibilité matérielle spéciale. S'il est implémenté, le système de récupération d'un appareil doit répondre à la commande --prompt_and_wipe_data, et les appareils doivent permettre aux utilisateurs 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 récupération peut ajouter jusqu'à cinq minutes avant qu'un appareil ne soit à nouveau utilisable, les fabricants d'appareils ne doivent pas ajouter de niveaux de récupération personnalisés. Si un appareil reste inutilisable plus longtemps, les utilisateurs sont plus susceptibles d'envoyer une demande d'assistance ou de garantie au lieu de récupérer eux-mêmes leur appareil.

Validation

Rescue Party supprime tous les événements de récupération lorsque l'appareil dispose d'une connexion de données USB active, car cela indique clairement que quelqu'un débogue l'appareil.

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

adb shell setprop persist.sys.enable_rescue 1

Ensuite, déclenchez 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
    adb shell stop
    adb shell start
  • 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 récupération. Rescue Party enregistre également toutes les opérations de récupération dans les journaux PackageManager persistants stockés dans /data/system/uiderrors.txt pour une inspection et un débogage ultérieurs. Les rapports de bug incluent également ces journaux persistants dans la section Messages d'avertissement de package.