web-dev-qa-db-ja.com

ルートからユーザーモードにadbを再起動する方法は?

ADBに関する基本的な質問。

adb rootは、adbをルートとして再起動します。しかし、私が欲しいのは、しばらくしてからユーザーに再起動することです。

私は次を試しました:

adb kill-server
adb start-server

動作しません。

ps -A-> adbのプロセス番号を書き留め、それを強制終了しました。これでも機能しませんでした。最後に、デバイスを再起動しています。ルートadbから一般的なadbに戻る方法はありますか?

ありがとうございました。

47
mk..

少し遅れて推測しますが、ここにそれがあります:「adb root」を使用した場合、次のメッセージが表示されます。

C:\>adb root
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root

ルートモードを終了するには、次を使用できます。

C:\>adb unroot
restarting adbd as non root
19
Akshay Gaur

adb kill-serverおよびadb start-serverは、PC側のadbデーモンのみを制御します。 service.adb.rootによって行われたadb rootプロパティの変更を元に戻した後、デバイス自体でadbdデーモンを再起動する必要があります。

~$ adb Shell id
uid=2000(Shell) gid=2000(Shell)

~$ adb root
restarting adbd as root

~$ adb Shell id
uid=0(root) gid=0(root)

~$ adb Shell 'setprop service.adb.root 0; setprop ctl.restart adbd'

~$ adb Shell id
uid=2000(Shell) gid=2000(Shell)
28
Alex P.

シェルを取り戻すためにこれを試してください:

adb Shell(root)と入力します。次に、以下のコマンドを入力します。

stop adbd && setprop service.adb.root 0 && start adbd &

このコマンドは、stop adbdadbdが成功した場合はsetprop service.adb.root 0stopped、最後にstart adbdプロパティが正常に設定されるとre.rootになります。 0.最後の&のおかげで、これはすべてバックグラウンドで行われます。

11
user837048

@ user837048の回答にもう少し説明を加えたいと思います。ファームウェアCyanogenMod 11およびKitKatを使用しているルートのOSX YosemiteおよびGalaxy S3では、EnableおよびDisableルートプロンプトに以下の手順を実行しました。

以下を確認してください

  • システム上

    • Android SDKがインストールされており、バイナリファイルへのパスが設定されていることを確認してください。シェルでwhich adbと入力します。ある程度の結果が得られるはずです。 $ which adb /Applications/Android Studio.app/sdk/platform-tools/adb
  • 携帯で

    • 設定>開発者オプション> Android Debugging = ON
    • 設定>開発者オプション>ルートアクセス= Apps and ADB

設定にDeveloper Optionsが表示されない場合は、[設定]> [電話について]に移動します。 Build numberまでスクロールダウンし、そこを7回タップします。私はその狂気を知っています。しかし、私はそれがうまくいくと信じています:D

携帯電話をUSBケーブルで接続します。 computer's端子に入力します

$ adb Shell

同様のプロンプトが表示されます。接続が信頼できるように、プロンプトがモバイルに表示されている場合は、「常に信頼」と「OK」をタップします

Shell@m0:/ $

今タイプ

Shell@m0:/ $ id
uid=2000(Shell) gid=2000(Shell) groups=1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:Shell:s0

あなたがnot root

シェルを終了すると、computer's Promptにフォールバックします

Shell@m0:/ $ exit

ルートを有効にします

$adb Shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
root@m0:/ #

すごい..あなたはrootです

root@m0:/ # id
uid=0(root) gid=0(root) context=u:r:Shell:s0

私はnormal non root Promptに戻るために多くの解決策を試みました。しかし、@ user837048のソリューション以外は機能しませんでした。

root@m0:/ # stop adbd && setprop service.adb.root 0 && start adbd &
[1] 32137
root@m0:/ #
$

これにより、Adb Promptから通常のプロンプトに戻ることができます。もう一度接続してください。

$ adb Shell
shell@m0:/ $

まあ..あなたは非ルートです

2
Jasim Muhammed

簡単な手順については、summaryをチェックしてください。詳細を知りたい場合は、以下をお読みください。

adbはデーモンです。 ps adbを実行すると、そのプロセスを確認できます。

Shell@grouper:/ $ ps adb
USER     PID   PPID  VSIZE  RSS     WCHAN    PC        NAME
Shell     133   1     4636   212   ffffffff 00000000 S /sbin/adbd

私は、adbがrootおよびユーザーとして実行されているときに、追加のプロパティ変数が使用しているものをチェックしました。

adbユーザーモード:

Shell@grouper:/ $ getprop | grep adb                                         
[init.svc.adbd]: [running]
[persist.sys.usb.config]: [mtp,adb]
[ro.adb.secure]: [1]
[sys.usb.config]: [mtp,adb]
[sys.usb.state]: [mtp,adb]

adbルートモード:

Shell@grouper:/ # getprop | grep adb                                         
[init.svc.adbd]: [running]
[persist.sys.usb.config]: [mtp,adb]
[ro.adb.secure]: [1]
[service.adb.root]: [1]
[sys.usb.config]: [mtp,adb]
[sys.usb.state]: [mtp,adb]

service.adb.rootは、adb rootを実行したときに表示された新しいprop変数であることがわかります。

だから、adbをrootからuserに戻すために、私は先に進み、これを0にした

setprop service.adb.root 0

しかし、これは何も変わりませんでした。

その後、先に進み、プロセスを強制終了しました(プロセスを再起動する目的で)。デバイスのpidプロセスのadbd133です

kill -9 133

プロセスを強制終了した後、シェルを自動的に終了しました。

ユーザーモードでadb Shellをやり直しました。

SUMMARY:

したがって、3つの非常に簡単な手順があります。

  1. ルートとしてadb Shellを入力します。
  2. setprop service.adb.root 0
  3. kill -9 (pid of adbd)

これらの手順の後、adb Shellを使用してシェルに再入力するだけで、ユーザーとしてデバイスに戻ります。

0
mk..