Rettungsparty

Viele Benutzer sind stark auf ihr Telefon angewiesen und benötigen jederzeit ein funktionierendes Gerät. Allerdings geraten Geräte manchmal in Neustartschleifen, was dazu führt, dass Benutzer Support-Tickets oder Garantieanfragen einreichen. Dieser Prozess ist für Benutzer frustrierend und für Gerätehersteller und Netzbetreiber teuer.

Android 8.0 enthält eine Funktion, die eine „Rettungsgruppe“ aussendet, wenn Kernsystemkomponenten in Absturzschleifen stecken bleiben. Die Rettungsgruppe führt dann eine Reihe von Maßnahmen durch, um das Gerät wiederherzustellen. Als letzten Ausweg startet Rescue Party das Gerät im Wiederherstellungsmodus neu und fordert den Benutzer auf, einen Werksreset durchzuführen.

Diese Rettungsfunktionen sind im Android Compatibility Definition Document nicht erforderlich, können aber dennoch nützlich sein, um Supportfälle zu reduzieren.

Implementierung

Rescue Party ist in Android 8.0 standardmäßig aktiviert und die Implementierung befindet sich in /services/core/java/com/android/server/RescueParty.java . Rescue Party empfängt Informationen über Boot- und Absturzereignisse und startet, wenn:

  • Der Systemserver wird innerhalb von 5 Minuten mehr als fünfmal neu gestartet.
  • Eine persistente System-App stürzt innerhalb von 30 Sekunden mehr als fünfmal ab.

Wenn eine dieser Situationen erkannt wird, eskaliert Rescue Party zur nächsten Rettungsstufe, verarbeitet die dieser Stufe zugeordnete Aufgabe und lässt das Gerät fortfahren, um zu prüfen, ob es wiederhergestellt wird. Jedes Level ist zunehmend aggressiver in dem, was es löscht oder zurücksetzt. Die letzte Ebene fordert den Benutzer auf, das Gerät auf die Werkseinstellungen zurückzusetzen.

Für die Unterstützung von Rescue Party ist keine spezielle Hardwareunterstützung erforderlich. Falls implementiert, muss das Wiederherstellungssystem eines Geräts auf den Befehl --prompt_and_wipe_data reagieren und Geräte müssen Benutzern eine Möglichkeit bieten, die Zerstörung von Benutzerdaten zu bestätigen, bevor sie fortfahren. Das Wiederherstellungssystem sollte dem Benutzer auch die Möglichkeit geben, zu versuchen, sein Gerät erneut zu starten.

Da jede Rettungsstufe bis zu 5 Minuten dauern kann, bis ein Gerät wieder betriebsbereit ist, sollten Gerätehersteller keine benutzerdefinierten Rettungsstufen hinzufügen. Durch die längere Zeit mit einem nicht funktionsfähigen Gerät ist es wahrscheinlicher, dass Benutzer eine Support- oder Garantieanfrage stellen, anstatt ihr Gerät selbst wiederherzustellen.

Validierung

Alle Rettungsereignisse werden unterdrückt, wenn das Gerät über eine aktive USB-Datenverbindung verfügt, da dies ein starkes Signal dafür ist, dass jemand das Gerät debuggt.

Um diese Unterdrückung außer Kraft zu setzen, führen Sie Folgendes aus:

adb shell setprop persist.sys.enable_rescue 1

Von dort aus können Sie eine System- oder UI-Absturzschleife auslösen.

Führen Sie Folgendes aus, um eine system_server Absturzschleife auf niedriger Ebene auszulösen:

adb shell setprop debug.crash_system 1

Führen Sie Folgendes aus, um eine SystemUI-Absturzschleife auf mittlerer Ebene auszulösen:

adb shell setprop debug.crash_sysui 1

Beide Absturzschleifen initiieren die Rettungslogik. Alle Rettungsvorgänge werden zur späteren Überprüfung und Fehlerbehebung auch in den dauerhaften PackageManager-Protokollen protokolliert, die unter /data/system/uiderrors.txt gespeichert sind. Diese dauerhaften Protokolle sind auch in jedem Fehlerbericht im Abschnitt „Paketwarnmeldungen“ enthalten.