コマンドライン経由でAndroidを再起動する最良の方法は何ですか(リモートで)?


29

私は、ルート化されたAndroid 4.1.1デバイスを再起動するための最良/友好的な方法を探しています。私はこれまでにこれらの解決策を見つけました:

  • su -c "reboot" -デバイスの再起動後にwifiで問題が発生します...これにより、場合によってはファイルシステムが破損する可能性があると読みました... sshで動作しません。
  • toolbox reboot -ここでも同じ懸念がありますが、sshを介して動作します。
  • reboot -d 8 -f -再起動後に問題が発生する(一部のアプリが起動しないなど)
  • busybox killall system_server -「Hot Reboot」(実際にはシステムの再起動ではありません)
  • start|stop -Androidランタイムの開始/停止(実際にはシステムの再起動ではありません)

(ハードウェア)電源ボタンを押しているとき、デバイスは正確に何をしますか?それが最も友好的な方法だと思います。


su -c "reboot"rebootで定義されているコマンドを実行しreboot.cます。 reboot.c長年にわたってあまり変わっていません。常にsync()を呼び出してから、デバイスを再起動しました。また、このcommitのおかげ、最新バージョンのreboot.cすべてのファイルシステムもアンマウントされます。Android 4.1.1には、私が言及したコミットが含まれているためsu -c "reboot"、Android 4.1.1でファイルシステムの破損がどのように発生するかはわかりません。
忘れられない

親愛なる:Firelordの遅い回答(su -c 'am start -a android.intent.action.REBOOT')はAndroid 4.1.2で機能し、既存の回答の中で最高のようです。Android 4.1.1で動作する場合、または忙しすぎて試すことができない場合は、緑色のチェックマークをクリックして、回答セクションの上部に浮かぶようにしてください。
忘れられない

回答:


13

シンプルで、本当に:

  • Androidは、ランタイムの重要な部分を安全にシャットダウンしています。
  • OSは、アプリやサービスに正常に終了するように指示する意図もブロードキャストしています。次に、これらはすべてのデータと共有設定のキャッシュをフラッシュし、what-notをsqliteデータベースなどに保存します。

つまり、アプリとサービスには、クリーンアップを体系的に行う機会が与えられます。

あなたが試したコマンドはもっと厳しいです。実際には、安全なシャットダウンのために安全メカニズムをバイパスします。

AndroidはLinuxそのものではありません。Linux環境をシャットダウンするためにこれらのコマンドを発行できるLinuxの通常のデスクトップバージョンの意味です。

次のようなラッパースクリプトを作成できる場合があります。

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

これsafe_shutdown.shを0755のアクセス許可で保存できます。携帯電話やROMによって、走行距離は異なる場合がありますので、保証はありません。


この説明をありがとう!リモートでこれを行うことは可能ですか?たとえばssh(adbではない)を介して?
アシー

4
彼は、コマンドでボタンのシャットダウンを模倣する方法を知りたいと思っています。
フロー

それがデバイスをシャットダウンする最も友好的/安全/最良の方法である場合、はい:)
acy

@Flow adb reboot?それが安全かどうかはわかりません!?!ブロードキャストを送信してACTION_SHUTDOWN呼び出すためのラッパースクリプトadb rebootですか?
t0mm13b

ブロードキャストACTION_SHUTDOWNがあなたが望むことをするかどうかわからない:「フォアグラウンドのアクティビティも一時停止されるので、アプリは通常これを処理する必要はありません。」 したがって、ほとんどのアプリのように聞こえますが、それ処理しません。アクティビティの一時停止は十分ですか?
マシュー

12

(ハードウェア)電源ボタンを押しているとき、デバイスは正確に何をしますか?それが最も友好的な方法だと思います。

デバイスの電源をオフにするオプションを備えたダイアログが表示されます(Androidでは再起動できません)。電源ボタンを長押しすると、ShutdownActivityが呼び出されるようです。

とにかく、これはリモートまたはローカルで試すことができますが、rootアクセスでのみ可能です:

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

正常なシャットダウンに続いて再起動します。ここで気づいたとき、私は意図を探していました

メソッドはAndroid 4.2.1、5.0.2、および6.0.1でテストされており、Android 4.1.1でも機能するはずです。

更新

標準のAndroid 5.0および6.0.1でテスト済み:

su -c 'svc power reboot'

ここでのソースコードによる、KitKatビルドもコマンドをサポートする必要があります。


1
まさに私が必要なもの。再起動テキストの値があるときに「Powering off ...」と表示されるのは、まだ奇妙です。
サイレン

10
killall zygote

これはルートを殺します zygoteプロセスが強制終了され、Androidシステムが更新されます。

これは携帯電話のハードウェアを再起動せず、Androidプロセスのみを再起動します。

デフォルトでは(Linuxの場合)、kill/ killallコマンドはプロセスに正常なシャットダウン方法を与えますが、それは接合子に依存しますなシャットダウン方法を提供しますが、実行中のAndroidアプリを正常にシャットダウンするかどうか実装にます。

注:使用するかどうかにかかわらず、これをルートとして実行する必要があります su -c。SSHまたはADB、または別の方法で接続し。

このアクションの他の名前:

  • ソフトリブート
  • ホットリブート

一部のデバイスでは、このコマンドの後にWifiが正しく再接続されないことに気付きました(したがって、Wifiを無効にし、しばらく待ってから、再度Wifiを再度有効にする必要があります)。
-palswim

2
読者向け:Lollipopでは、Androidフレームワークを再起動する標準的な方法はam restartです。ただし、これにはルートアクセスが必要です。
消防士

killall zygoteのプロセスにシャットダウンする優雅な方法を与えますか?興味深い質問。誰かがzygote知るには、ソースコードを見る必要があります。
忘れられない
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.