Aufrufen des abgesicherten Modus von der Adb-Shell

Meine Frage ähnelt dieser , aber ich habe nicht unbedingt ein ausgeschaltetes Gerät.

Wie kann ich von meinem Wiederherstellungs-Image aus in den abgesicherten Modus von Android wechseln (oder ihn beim nächsten Mal im abgesicherten Modus starten lassen)?

Ich nehme an, es ist möglich, die Aktionen nachzuahmen, die das tatsächliche Android-System ausführen würde, wenn Sie den abgesicherten Modus aus dem Neustartmenü auswählen. Ich weiß jedoch nicht einmal, was Android bei der Auswahl des abgesicherten Modus tatsächlich mit dem System macht.

Antworten (1)

Hinweis: Die Lösung wurde auf Android 4.2.1, 5.0.2 und 5.1.1 getestet.


Der Wert für die Systemeigenschaft persist.sys.safemode bestimmt, ob das Telefon im abgesicherten Modus oder im normalen Modus gestartet werden soll.

Beim Booten in das Android-Betriebssystem kann der Wert bei vorausgesetztem Root-Zugriff geändert werden als

adb shell su -c 'setprop persist.sys.safemode 1'
adb shell su -c 'echo "1" > /data/property/persist.sys.safemode' #alternative 

Wenn Sie in eine benutzerdefinierte booten , müssen Sie die Daten und optional die Systempartition einhängen

adb shell busybox printf "1" > /data/property/persist.sys.safemode         #works if recovery has Busybox. If Android OS has busybox then system/xbin/busybox would work
adb shell echo "1" > /data/property/persist.sys.safemode                   #alternative
adb shell chmod 600 /data/property/persist.sys.safemode                    #required; changes the permission of file to rw-------, identical to rest of the files under /data/property

Es ist zu beachten, dasspersist.sys.safemode die Datei nicht gefunden wird , wenn Sie seit dem letzten Zurücksetzen auf die Werkseinstellungen noch nie im abgesicherten Modus gebootet haben .

Android setzt den Inhalt dieser Datei bei jedem Neustart zurück, sodass Sie sich keine Sorgen machen müssen, im abgesicherten Modus hängen zu bleiben. Ändern Sie jedoch zum Zweck der Ausfallsicherheit den Wert auf 0oder leeren Sie die Datei (NULL), falls Sie jemals hängen bleiben sollten.

Kurz gesagt, die von Ihnen festgelegte Eigenschaft wird in einer Datei gespeichert und bleibt daher persistent, wenn Sie das Gerät herunterfahren. Sie können Ihren Wert in der Datei aus dem Wiederherstellungsmodus sehen, vorausgesetzt, Sie haben Android nach dem Bearbeiten der Eigenschaft nicht erneut gestartet. Sobald Sie nun beginnen, in das Android-Betriebssystem zu booten, lesen Android et al . die Datei und bereiten basierend auf dem Inhalt den sicheren/normalen Modus für Sie vor. Nach dem Lesen der Datei wird der Inhalt der Datei zurückgesetzt, sodass beim nächsten Neustart immer der normale Modus angezeigt wird.

Ich habe bei meinen Experimenten festgestellt, dass Android im abgesicherten Modus booten würde, selbst wenn der Wert eine positive oder negative Ganzzahl oder sogar ein Dezimalwert ist.

Ich habe einen guten Hinweis aus dem Quellcode von ShutdownThread.java erhalten , dass für den abgesicherten Modus eine Systemeigenschaft festgelegt werden muss. Das endgültige Fazit habe ich jedoch anhand eines Kommentars von pylerSM und eines Beitrags von ZiT777 gezogen.

Sie können dies selbst testen. Stellen Sie die Stütze ein, starten Sie das Gerät neu, aber ziehen Sie den Akku beim OEM-Logo heraus. Starten Sie die Wiederherstellung und überprüfen Sie den Inhalt der Datei. Booten Sie jetzt normal in Android, aber laufen adb shell getprop | grep persist.sys.safemodeoder adb shell su -c echo /data/property/persist.sys.safemodekontinuierlich während der Boot-Animation. Sie würden sehen, dass sich der Wert von 1 auf nichts (NULL) ändert. // Tatsächlich ist kein vollständiger Neustart erforderlich, um in den abgesicherten Modus zu booten. Sobald die Requisite eingestellt ist, würde sogar ein Soft-Reset in den abgesicherten Modus booten.
Der Name hat sich von Android 6+ vielleicht zu persist.sys.sm_mode geändert ?