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 cicli di riavvio, il che porta gli utenti a presentare richieste di assistenza o richieste di garanzia. Questo processo è frustrante per gli utenti e costoso per i produttori di dispositivi e gli operatori.

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

Implementazione

Rescue Party è abilitato 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 recupero successivo, elabora l'attività associata a quel livello e consente al dispositivo di procedere per vedere se si ripristina. Ogni livello è progressivamente più aggressivo in ciò che cancella o ripristina. L'ultimo livello richiede all'utente di ripristinare i dati di fabbrica del dispositivo.

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

Poiché ogni livello di ripristino può aggiungere fino a cinque minuti prima che un dispositivo torni a funzionare, i produttori di dispositivi non devono aggiungere livelli di ripristino personalizzati. L'aumento del tempo con un dispositivo non funzionante rende più probabile che gli utenti avviano una richiesta di assistenza o in 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 eliminazione, esegui:

adb shell setprop persist.sys.enable_rescue 1

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

  • Per attivare un ciclo di arresti anomali di basso livello system_server, esegui:

    adb shell setprop debug.crash_system 1
    adb shell stop
    adb shell start
  • Per attivare un ciclo di arresti anomali di SystemUI di livello intermedio, esegui:

    adb shell setprop debug.crash_sysui 1

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