Rescue Party

Gli utenti dipendono dai loro smartphone e hanno bisogno di un dispositivo funzionante in ogni momento. Tuttavia, a volte i dispositivi finiscono in loop di riavvio, il che porta gli utenti a presentare ticket di assistenza o richieste di garanzia. Questa procedura è frustrante per gli utenti e costosa per i produttori e gli operatori di telefonia mobile.

Android 8.0 (livello API 26) e versioni successive includono una funzionalità che attiva una procedura di ripristino quando rileva componenti di sistema principali bloccati in loop di arresto anomalo. A questo segnale, la funzionalità Rescue Party esegue una serie di azioni per ripristinare il dispositivo. Come ultima risorsa, Rescue Party riavvia il dispositivo in modalità Recovery e chiede all'utente di eseguire un ripristino dei dati di fabbrica.

Implementazione

Rescue Party è abilitata per impostazione predefinita e l'implementazione si trova in /services/core/java/com/android/server/RescueParty.java. Rescue Party riceve informazioni sugli eventi di avvio e arresto anomalo e si avvia se:

  • system_server si riavvia più di cinque volte in cinque minuti.
  • Un'app di sistema persistente si arresta in modo anomalo più di cinque volte in 30 secondi.

Quando Rescue Party rileva una di queste situazioni, passa al livello di ripristino successivo, elabora l'attività associata a quel livello e consente al dispositivo di procedere per verificare se si ripristina. Ogni livello è progressivamente più aggressivo in ciò che cancella o reimposta. Il livello finale chiede all'utente di ripristinare i dati di fabbrica del dispositivo.

Rescue Party non richiede un supporto hardware speciale. Se implementato, il sistema di ripristino di un dispositivo deve rispondere al comando --prompt_and_wipe_data e i dispositivi devono fornire agli utenti un modo per confermare l'eventuale eliminazione dei dati utente prima di procedere. Il sistema di ripristino dovrebbe anche dare all'utente la possibilità di tentare di avviare di nuovo il dispositivo.

Poiché ogni livello di ripristino può aggiungere fino a cinque minuti prima che un dispositivo sia di nuovo operativo, i produttori di dispositivi non devono aggiungere livelli di ripristino personalizzati. Un aumento del tempo di inoperatività del dispositivo rende più probabile che gli utenti avvino una richiesta di assistenza o garanzia anziché ripristinare autonomamente il dispositivo.

Convalida

Rescue Party sopprime tutti gli eventi di ripristino quando il dispositivo ha una connessione dati USB attiva, perché è un segnale forte che qualcuno sta eseguendo il debug del dispositivo.

Per eseguire l'override di questa soppressione, esegui:

adb shell setprop persist.sys.enable_rescue 1

Da qui, attiva un loop di arresto anomalo del sistema o dell'interfaccia utente:

  • Per attivare un loop di arresto anomalo di system_server di basso livello, esegui:

    adb shell setprop debug.crash_system 1
    adb shell stop
    adb shell start
  • Per attivare un loop di arresto anomalo di SystemUI di livello intermedio, esegui:

    adb shell setprop debug.crash_sysui 1

Entrambi i loop di arresto anomalo avviano la logica di ripristino. Rescue Party registra anche tutte le operazioni di ripristino nei log di PackageManager persistenti memorizzati in /data/system/uiderrors.txt per un'ispezione e un debug successivi. I report sui bug includono anche questi log persistenti nella sezione Messaggi di avviso del pacchetto.