如何从root重启adb到用户模式?

问题描述 投票:0回答:9

关于亚行的基本问题。

adb root
以 root 身份重新启动 adb。但我想要的是在一段时间后重新启动它给用户。

我尝试了以下方法:

adb kill-server
adb start-server

不起作用..

ps -A
-> 记下 adb 的进程号并杀死它.. 即使这样也不起作用。最后我重新启动我的设备。有什么办法可以从 root adb 返回到 General adb 吗?

谢谢你。

android adb root
9个回答
38
投票

如果您使用

adb root
,您会收到以下消息:

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

要退出root模式,您可以使用:

C:\>adb unroot
restarting adbd as non root

32
投票

adb kill-server
adb start-server
仅控制PC端的
adb
守护进程。恢复由
adbd
完成的
service.adb.root
属性更改后,您需要在设备本身上重新启动
adb root
守护进程:

~$ 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)

11
投票

尝试此操作以确保您找回外壳:

进入adb shell(root)。然后输入以下命令。

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

此命令将

stop adbd
,然后
setprop service.adb.root 0
(如果
adbd
已成功
stop
ped),最后重新
start adbd
(如果
.root
属性已成功设置为 0)。所有这些都将在背景感谢最后的
&


2
投票

我想对@user837048的答案添加更多解释。在我的 OSX Yosemite 和 Galaxy S3 上,它们已获得 root 权限并使用固件

CyanogenMod 11
KitKat
我已针对
Enable
Disable
root 提示完成了以下操作。

请确认以下内容

  • 在您的系统上

    • 确保您已安装
      Android SDK
      并且已设置二进制文件的路径。在 shell 上输入
      which adb
      。它一定会给你带来一些结果。
      
      $ which adb
      /Applications/Android Studio.app/sdk/platform-tools/adb
      
  • 在您的手机上

    • 设置 > 开发者选项 > Android 调试 =
      ON
    • 设置 > 开发者选项 > Root 访问权限 =
      Apps and ADB

如果您在设置中没有看到

Developer Options
,请转到“设置”>“关于手机”。向下滚动到
Build number
并点击那里 7 次。我知道这很疯狂。但相信我,它有效:D

通过 USB 线连接您的手机。 在您的

computer's
终端

上输入
$ adb shell

您将看到类似的提示,如果您的手机上显示任何提示,要信任连接,请点击“始终信任”和“确定”

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

现在退出 shell,这将回退到

computer's prompt

shell@m0:/ $ exit

现在激活root

$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:/ $

好吧..你不是root


0
投票

要了解快速步骤,只需检查摘要。如果有兴趣了解详情,请继续阅读下文。

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 root 模式:

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 改回用户,我继续将其设置为 0

setprop service.adb.root 0

但这并没有改变任何事情。

然后我继续杀死该进程(意图重新启动该进程)。我的设备中

pid
进程的
adbd
133

kill -9 133

杀死进程后,我自动退出 shell。

我再次执行了

adb shell
,它处于用户模式。

总结:

所以,我们有 3 个非常简单的步骤。

  1. 以 root 身份输入 adb shell。
  2. setprop service.adb.root 0
  3. 杀-9
    (pid of adbd)

完成这些步骤后,只需使用

adb shell
重新进入 shell,您就会以用户身份返回设备。


0
投票

我能够按照以下步骤推送我的主机文件 如何将文件复制到 Android 的 /system 文件夹,只需进行少量修改。

. adb root
. adb shell avbctl disable-verification
. adb reboot
// wait for the avd to reboot before proceeding
. adb root
. adb remount
. adb push <your_host_file> /system/etc/hosts

-1
投票

这是一个很常见的问题。

一种解决方案是终止 adb 服务器并通过命令提示符重新启动。有时这可能没有帮助。

只需进入 Window 任务管理器终止 adb 进程并重新启动 Eclipse。

会完美工作:)


-1
投票

我一直在使用elementary OS loki 来解决这个问题。大约有一天,我使用以下命令重新启动 adb 解决了这个问题:

./adb kill-server

./adb start-server

需要在Sdk文件夹>Platform Tools

现在,重新启动手机,这将重新启动手机中的所有进程。

这就是我修复它的方法。


-2
投票

如果您无法访问 Android Device Monitor 上的数据文件夹

cmd

C:\Users\bscis\AppData\Local\Android\sdk\platform-tools
(Where you located sdk folder)

C:\Users\bscis\AppData\Local\Android\sdk\platform-tools>adb shell
generic_x86:/ $

C:\Users\bscis\AppData\Local\Android\sdk\platform-tools>adb kill-server
C:\Users\bscis\AppData\Local\Android\sdk\platform-tools>adb start-server
* daemon not running. starting it now at tcp:5037 *
* daemon started successfully *

C:\Users\bscis\AppData\Local\Android\sdk\platform-tools>adb root

C:\Users\bscis\AppData\Local\Android\sdk\platform-tools>

工作正常......

© www.soinside.com 2019 - 2024. All rights reserved.