adb shell su工作,但adb root不工作

rum*_*tel 70 shell android root adb

我根植了解锁的Galaxy S3(SGH-T999)

现在,我正在尝试adb root从Windows 命令提示符运行,但是,我收到adbd cannot run as root in production builds错误.所以,我检查的第一件事是我的手机是否真的扎根了?

所以我尝试了以下方法:

打开命令提示符

$adb devices // lists my device
$adb shell //goes to shell
$su // opens a 'SuperSu' prompt on my phone and I 'Grant' permission
# // Before following the rooting instructions, I was getting 'no su command found' in the previous step. So, I believe my phone is ROOTED. **Correct me if I'm wrong.**
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时adb root,我会收到adbd cannot run as root in production builds错误.所以,我想,我可能不得不做一些超出我上面所做的事情.我尝试了以下SO问题中的所有解决方案:

以上都不适合我.他们所做的只是让SHELL的ROOT访问.我想adb root工作,以便我可以执行各种adb命令而不进入shell.

Nga*_*Duy 26

在一些开发人员友好的ROM中,您可以在设置>开发人员选项>根访问中启用Root Access.之后变得可用.不幸的是,它不适用于市场上的大多数库存ROM.adb root

  • 我没有在开发选项中看到"Root access"选项. (49认同)
  • @Amalgovinus 我认为这取决于您使用的房间。:) (2认同)

Ale*_* P. 22

通过设计adb root开发工作命令只建立(即enguserdebug具有ro.debuggable=1默认情况下).因此,要adb root在您的root设备上启用该命令,只需将该ro.debuggable=1行添加到以下文件之一:

/system/build.prop
/system/default.prop
/data/local.prop
Run Code Online (Sandbox Code Playgroud)

如果您想默认adb shell启动root- 那么也添加ro.secure=0.

或者你可以使用修改后的adbd二进制文件(不检查ro.debuggable)

来自https://android.googlesource.com/platform/system/core/+/master/adb/daemon/main.cpp

#if defined(ALLOW_ADBD_ROOT)
// The properties that affect `adb root` and `adb unroot` are ro.secure and
// ro.debuggable. In this context the names don't make the expected behavior
// particularly obvious.
//
// ro.debuggable:
//   Allowed to become root, but not necessarily the default. Set to 1 on
//   eng and userdebug builds.
//
// ro.secure:
//   Drop privileges by default. Set to 1 on userdebug and user builds.
Run Code Online (Sandbox Code Playgroud)

  • 我在哪里可以获得上面的编译可执行文件? (5认同)
  • 我将ro.debuggable和ro.secure的新值添加到您指定的文件中,但是它们在每次重新启动时仍会被覆盖,并且更改没有任何效果。 (2认同)

Ant*_*ony 8

我有三星Galaxy Trend Plus(GT-S7580).

运行'adb root'给了我同样的'adbd无法在生产版本中以root身份运行'错误.

对于具有开发者选项 - > Root访问权限的设备,选择"仅限ADB"以提供对设备的adb root访问权限(如NgaNguyenDuy所建议).

然后尝试按照通过ADB以root身份启动脚本的解决方案运行该命令.在我的情况下,我只是想运行'netcfg rndis0 dhcp'命令,我就是这样做的:

adb shell "su -c netcfg rndis0 dhcp"
Run Code Online (Sandbox Code Playgroud)

请以这种方式运行时检查您是否犯了任何错误.

如果仍然无效,请检查您是否正确设备了设备.如果仍然没有运气,请尝试安装一个自定义ROM,如Cyanogen Mod,以便"adb root"工作.


小智 7

您需要将boot.img/sbin /文件夹中的adbd二进制文件替换为su功能的二进制文件.您还必须进行一些default.prop编辑.

三星似乎比其他厂商更难.我有一些你可以尝试的adbd二进制文件,但它需要知道使用新的二进制文件去编译和重新编译boot.img.此外,如果你有一个锁定的bootloader ...这不会发生.

此外,Chainfire还有一款可在Play商店中授予adbd root权限的应用:https://play.google.com/store/apps/details? id = eu.chainfire.adbd &hl = en

最后,如果您正在尝试编写具有SU权限的Windows脚本,您可以使用以下命令样式执行此操作...但是,您至少需要在其运行的第一个时间内授予(在电话上)SU权限. .

adb shell"su -c ls"<-list工作目录与su权限.adb shell"su -c echo anytext> /data/test.file"

这只是一些例子.如果您具体说明您要完成的任务,我可能会提供更具体的建议

-scosler


Sam*_*van 7

我在abd shell中用于进入su模式

亚行外壳“苏”

  • 在 Mac OS 上,我收到“/system/bin/sh: su: not found”错误。请问有什么建议吗? (2认同)
  • @SachinG 也许你使用了错误的引号类型?尝试运行这个 `adb shell "su -c whoami"` (2认同)

cwe*_*ske 6

adbd有一个编译标志/选项来启用 root 访问:ALLOW_ADBD_ROOT=1.

直到 Android 9:如果adbd在您的设备上编译时没有该标志,它在启动时总是会放弃特权,因此“adb root”根本无济于事。 我不得不打补丁的电话setuid()setgid()setgroups()和能力下降了二进制的自己让我的电子书阅读器永久扎根adbd。

Android 10 改变了这一点;当手机/平板电脑解锁 ( ro.boot.verifiedbootstate == "orange") 时,无论如何都可以使用 adb root 模式。


And*_*etz 5

尝试建立模拟器时,我遇到了这个问题,我发现这是因为我正在运行带有Google Play的Nexus 5x模拟器。创建了一个没有Google Play的其他模拟器,adb root它将为您启动设备。希望这对某人有帮助。

  • 2020,这对我有帮助,但我确实需要一种方法来在启用了 Play 商店的设备上执行此操作,而无需 root 手机,但不确定是否可行 (2认同)