Was ist der beste Weg, um Android über die Befehlszeile (aus der Ferne) neu zu starten?

Ich suche nach der besten / freundlichsten Möglichkeit, mein gerootetes Android 4.1.1-Gerät neu zu starten. Diese Lösungen habe ich bisher gefunden:

  • su -c "reboot"- Verursacht Probleme mit dem WLAN nach dem Neustart auf meinem Gerät ... Ich habe gelesen, dass dies in einigen Fällen zu einem fehlerhaften Dateisystem führen kann ... Funktioniert bei mir nicht über ssh.
  • toolbox reboot- Gleiche Bedenken hier, funktioniert aber über ssh.
  • reboot -d 8 -f- verursacht Probleme nach dem Neustart, z. B. werden einige Apps nicht gestartet
  • busybox killall system_server- "Hot Reboot" (nicht wirklich ein Systemneustart)
  • start|stop- Startet/stoppt Android Runtime (nicht wirklich ein Systemneustart)

Was macht das Gerät genau, wenn ich den (Hardware-) Netzschalter drücke? Ich denke, das ist der freundlichste Weg.

su -c "reboot"führt den rebootBefehl aus, der in definiert ist reboot.c. reboot.chat sich über die Jahre nicht viel verändert. Es hat immer sync() aufgerufen und dann das Gerät neu gestartet. Dank dieses Commits hängen auch moderne Versionen von reboot.calle Dateisysteme aus. Android 4.1.1 enthält das von mir erwähnte Commit, und daher sehe ich nicht, wie su -c "reboot"Android 4.1.1 jemals zu einer Beschädigung des Dateisystems führen könnte.
Liebe Acy: Die späte Antwort von Firelord ( su -c 'am start -a android.intent.action.REBOOT') funktioniert bei mir unter Android 4.1.2 und scheint mir die beste der vorhandenen Antworten zu sein. Wenn es für Sie unter Android 4.1.1 funktioniert oder wenn Sie zu beschäftigt sind, um es auszuprobieren, klicken Sie bitte auf das grüne Häkchen, damit es an den Anfang des Antwortbereichs schwebt.

Antworten (3)

Was macht das Gerät genau, wenn ich den (Hardware-) Netzschalter drücke? Ich denke, das ist der freundlichste Weg.

Sie sehen einen Dialog mit einer Option zum Ausschalten des Geräts (Standard-Android bietet keinen Neustart). Es scheint, dass ShutdownActivity aufgerufen wird, wenn Sie die Power-Taste lange drücken.

Wie auch immer, das ist, was Sie versuchen können, remote oder lokal, aber nur mit Root-Zugriff:

su -c 'am start -a android.intent.action.REBOOT'

Es wird ein ordnungsgemäßes Herunterfahren durchgeführt, gefolgt vom Neustart. Ich suchte nach einer Absicht, als ich sie hier bemerkte .

Die Methode wurde auf Android 4.2.1, 5.0.2 und 6.0.1 getestet und sollte auch für Android 4.1.1 funktionieren

Aktualisieren

Getestet auf Stock Android 5.0 und 6.0.1:

su -c 'svc power reboot'

Gemäß dem Quellcode hier sollten auch KitKat-Builds den Befehl unterstützen.

Genau das, was ich brauchte. Ich finde es immer noch seltsam, dass "Powering off ..." angezeigt wird, wenn es Werte für den Neustarttext gibt.

Ganz einfach:

  • Android fährt wichtige Teile der Laufzeit sicher herunter.
  • Das Betriebssystem sendet auch Absichten, Apps und Dienste anzuweisen, ordnungsgemäß zu schließen. Diese wiederum leeren ihre Caches mit allen Daten und gemeinsamen Einstellungen, speichern What-Nots in der SQLite-Datenbank und so weiter.

Mit anderen Worten, Apps und Dienste erhalten die Möglichkeit, systematisch aufzuräumen.

Die Befehle, die Sie versucht haben, sind härter. Sie umgehen tatsächlich die Sicherheitsmechanismen für ein ordnungsgemäßes Herunterfahren.

Android ist per se kein Linux im Sinne einer gewöhnlichen Desktop-Version von Linux, bei der diese Befehle zum Herunterfahren der Linux-Umgebung ausgegeben werden könnten.

Es könnte möglich sein, ein Wrapper-Skript wie dieses zu erstellen:

#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot

Sie könnten dies als safe_shutdown.sh, mit den Berechtigungen 0755 speichern. Ihr Kilometerstand kann je nach Mobilteil und ROM variieren – daher gibt es keine Garantien.

danke für diese erläuterung! Ist es möglich, dies aus der Ferne zu tun, z. B. über ssh (nicht adb)?
Ich denke, er will wissen, wie er das Herunterfahren der Taste mit einem Befehl nachahmen kann.
Wenn das der freundlichste/sicherste/beste Weg ist, das Gerät herunterzufahren, dann ja :)
@Fluss adb reboot? Ich bin mir nicht sicher, ob das sicher ist!?! Vielleicht ein Wrapper-Skript darum, um eine Sendung zu senden und ACTION_SHUTDOWNdann anzurufen adb reboot?
Ich bin mir auch nicht sicher, ob das Senden ACTION_SHUTDOWNdas tut, was Sie wollen: "Apps müssen dies normalerweise nicht handhaben, da die Vordergrundaktivität ebenfalls angehalten wird." Klingt so, als würden die meisten Apps damit nicht umgehen. Reicht es aus, die Aktivität zu pausieren?
Wie können Sie die Aktivität dann pausieren? Es ist kein garantierter Ort, um Einstellungen usw. gemäß dem Aktivitätslebenszyklus zu speichern. Nicht nur das, das Skript würde am Ende verwickelt werden, um festzustellen, welche Apps ausgeführt werden, einschließlich Dienste ... habe das nicht gesehen ACTION_SHUTDOWN(es war für ältere Versionen zutreffend, wurde aber in JB leicht geändert).
@sguha Versuchen Sie so etwas über ssh: su -c 'am broadcast android.intent.action.ACTION_SHUTDOWN && sleep 5 && toolbox reboot'(Kann je nach ROM variieren)
Sieht so aus, als ob nichts davon auf meinen Geräten funktioniert. Versuchte es auf FinlessROM auf dem RK3188-Gerät sowie LG P970 mit CM10.1.
Hier treten nach dem Neustart über die Befehlszeile immer noch Netzwerkprobleme auf (versucht mit su -c 'am broadcast android.intent.action.ACTION_SHUTDOWN && sleep 5 && toolbox reboot' und busybox killall system_server )
am broadcast android.intent.action.ACTION_SHUTDOWNscheint die Absicht gut auf meinem Android 5.1.1 "Lollipop" Emulator zu übertragen. Es gibt zurück: Broadcast completed: result=0. Seltsamerweise gibt derselbe Befehl auf meinem Samsung Galaxy S Relay mit Android 4.1.2 "Jelly Bean" nie etwas zurück. Stattdessen amscheint der Befehl für immer weiterzulaufen.
killall zygote

Dies beendet den Root- zygoteProzess und führt zu einer Aktualisierung des Android-Systems.

Dadurch wird nicht die Hardware Ihres Telefons neu gestartet, sondern nur die Android-Prozesse.

Standardmäßig (in Linux) geben die kill/ killall-Befehle den Prozessen eine elegante Möglichkeit zum Herunterfahren, obwohl es von der Zygote -Implementierung abhängt, ob dies wiederum Ihre laufenden Android-Apps ordnungsgemäß herunterfährt.

Hinweis: Sie müssen dies als root ausführen, unabhängig davon, ob Sie su -c, eine Verbindung über SSH oder ADB oder eine andere Methode verwenden.

Andere Namen für diese Aktion:

  • Sanfter Neustart
  • Heißer Neustart
Ich habe bei einigen Geräten festgestellt, dass sich das WLAN nach diesem Befehl nicht wieder richtig verbindet (also muss ich das WLAN deaktivieren, eine Minute warten und das WLAN dann wieder aktivieren).
Für Leser: In Lollipop ist die Standardmethode zum Neustarten des Android-Frameworks am restart. Dies erfordert jedoch Root-Zugriff.
Bietet killall zygoteProzessen eine elegante Möglichkeit zum Herunterfahren? Interessante Frage. Jemand müsste sich den zygoteQuellcode ansehen, um es zu wissen.