Molti utenti dipendono molto dai propri telefoni e richiedono un dispositivo funzionante in qualsiasi momento. Tuttavia, a volte i dispositivi finiscono in loop di riavvio, il che spinge gli utenti a presentare richieste di assistenza o richieste in garanzia. Questa procedura è frustrante per gli utenti e costosa per i produttori di dispositivi e gli operatori.
Android 8.0 include una funzionalità che invia un "gruppo di salvataggio" quando rileva che i componenti di sistema di base sono bloccati in loop di arresto anomalo. Rescue Party esegue quindi una serie di azioni per recuperare il dispositivo. Come ultima risorsa, Recupero Riavvia il dispositivo in modalità di ripristino e chiede all'utente di eseguire un ripristino dei dati di fabbrica.
Queste funzionalità di recupero non sono richieste dal Compatibility Definition Document (Documento di definizione della compatibilità) di Android, ma possono comunque essere utili per ridurre le richieste di assistenza.
Implementazione
Soccorso è abilitato per impostazione predefinita in Android 8.0 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:
- Il servizio system_server si riavvia più di 5 volte in 5 minuti.
- Un'app di sistema persistente si arresta in modo anomalo più di 5 volte in 30 secondi.
Quando viene rilevata una di queste situazioni, Rescue Party passa al livello di salvataggio 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 termini di elementi che vengono cancellati o reimpostati. Il livello finale chiede all'utente di ripristinare i dati di fabbrica del dispositivo.
Non è richiesto alcun supporto hardware speciale per supportare la funzionalità Soccorso. Se implementato, il sistema di recupero di un dispositivo deve rispondere al comando --prompt_and_wipe_data
e i dispositivi devono offrire agli utenti un modo per confermare l'eventuale distruzione dei dati utente prima di procedere. Il sistema di recupero dovrebbe anche offrire all'utente la possibilità di tentare di riavviare il dispositivo.
Poiché ogni livello di recupero può richiedere fino a 5 minuti prima che un dispositivo sia di nuovo operativo, i produttori di dispositivi non devono aggiungere livelli di recupero personalizzati. Un tempo maggiore con un dispositivo inutilizzabile aumenta le probabilità che gli utenti avviino una richiesta di assistenza o in garanzia anziché eseguire il recupero autonomo del dispositivo.
Convalida
Tutti gli eventi di salvataggio vengono soppressi 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 puoi attivare un loop di arresto anomalo del sistema o dell'interfaccia utente.
Per attivare un loop di arresto anomalo system_server
a basso livello, esegui:
adb shell setprop debug.crash_system 1
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 salvataggio. Tutte le operazioni di recupero vengono inoltre registrate nei log persistenti di PackageManager memorizzati in /data/system/uiderrors.txt
per un'ispezione e un debug successivi.
Questi log permanenti sono inclusi anche in ogni segnalazione di bug nella sezione "Messaggi di avviso del pacchetto".