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

56

ADB的基本问题。

adb root以root权限重新启动adb。但我想在一段时间后将其重新启动为用户。

我尝试了以下方法:

adb kill-server
adb start-server

无法工作...

ps -A -> 注意adb进程的编号并将其杀死...即使这样也不起作用。最终我重新启动了我的设备。是否有任何方法可以从root adb返回普通adb?

谢谢。

8个回答

39
如果您使用了 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

3
这个解决方案对我没有起作用。未知选项 unroot。Alex P 的解决方案有效。 - user13107

32

adb kill-serveradb start-server仅控制PC端的adb守护进程。在通过adb root还原service.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)

1
嗨。我试过了。在执行这些步骤后,设备仍处于根模式。 - Sandeep
你要么做错了,要么你的设备不是原生安卓系统...请看我的更新。 - Alex P.

11

尝试以下方法以确保您获得您的shell:

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

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

执行该命令将停止adbd,然后如果成功停止adbd,则设置属性service.adb.root 0,最后如果成功将.root属性设置为0,则重新启动adbd。所有这些都将在后台完成,感谢最后的&


这个很完美 :) 但是用户可能会困惑在哪里输入这些内容.. 所以我写了一个新手答案。 - Jasim Muhammed
尝试过这个,我的设备(在Lollipop 5.1上)变成了一片空白......不知道发生了什么,只是拆下电池重新安装并打开它 :/ - Gokul NC

2
我想对@user837048的回答进行一些补充说明。在我的OSX Yosemite和Galaxy S3上,我使用了固件CyanogenMod 11KitKat,以下是我执行的步骤,以启用禁用root提示。

请确保以下内容:

  • 在您的系统上

    • 确保您已安装Android SDK并设置了二进制文件的路径。在您的shell上键入which adb。它必须给出一些结果。 $ which adb /Applications/Android Studio.app/sdk/platform-tools/adb
  • 在您的手机上

    • 设置>开发人员选项> Android调试= 打开
    • 设置>开发人员选项>根访问= 应用程序和ADB

如果您在设置中看不到开发人员选项,请转到设置>关于手机。向下滚动到构建号码并点击7次。我知道这很疯狂。但相信我它有效:D

通过USB电缆连接您的电话。 在您的计算机终端上键入

$ 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

看起来你不是 root

现在退出shell,将会回到 计算机提示符

shell@m0:/ $ exit

现在激活root。
$adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
root@m0:/ #

Wow.. you are root

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

我尝试了许多方法来回到正常的非根提示符。但除了@user837048的解决方案外,其他都没有奏效。

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

这可能会将您从Adb提示符退出到正常提示符。现在重新连接。
$ 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和user身份运行时,它使用了哪些额外的属性变量。

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]

我们可以看到,当我们执行adb root时,service.adb.root是一个新的属性变量。
因此,为了将adb从root更改回用户,我将其设置为0。
setprop service.adb.root 0

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

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

kill -9 133

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

我再次执行adb shell,它处于用户模式。

总结:

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

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

完成这些步骤后,只需使用adb shell重新进入shell,您就可以作为用户回到设备上了。


-1
我在使用 elementary OS loki 时遇到了这个问题。大约一天的时间后,我通过使用以下命令重新启动 adb 来解决它:
./adb kill-server

./adb start-server

你需要在Sdk文件夹中的平台工具内。

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

这就是我修复它的方法。


-1

这是一个非常普遍的问题。

一种解决方法是通过命令提示符关闭adb服务器并重新启动它。有时这可能无法解决问题。

只需转到Windows任务管理器,关闭adb进程并重新启动Eclipse即可。

就可以完美地工作啦 :)


然后尝试通过命令提示符结束adb服务器。这可能会在您的端起作用。 - Sravani
前往SDK中的platform-tools文件夹。例如:可能是Downloads\adt-bundle-windows-x86-20131030\sdk\platform-tools,然后按下ctrl+shift和右键单击鼠标以在此处打开命令窗口。接着输入两个命令adb kill-serveradb start-server,同时保持你的IDE运行。 - Sravani

-2

如果您无法在Android设备监视器上访问数据文件夹

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>

运行正常......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接