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

时间:2014-08-24 23:58:49

标签: android shell adb root

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

现在,我正在尝试从Windows 命令提示符运行adb root,但是,我收到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.**

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

以上都不适合我。他们所做的只是让SHELL的ROOT访问。我希望adb root能够工作,这样我就可以执行各种adb命令而无需进入shell。

10 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:18)

按设计adb root命令仅适用于开发版本(即enguserdebug,默认情况下为ro.debuggable=1。因此,要在您的 rooted 设备上启用adb root命令,只需将ro.debuggable=1行添加到以下文件之一:

/system/build.prop
/system/default.prop
/data/local.prop

如果您希望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.

答案 2 :(得分:8)

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

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

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

然后尝试按Launch a script as root through ADB处的解决方案运行命令。 就我而言,我只是想运行'netcfg rndis0 dhcp'命令,我这样做了:

adb shell "su -c netcfg rndis0 dhcp"

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

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

答案 3 :(得分:6)

您需要将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

答案 4 :(得分:6)

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

adb shell" su"

答案 5 :(得分:4)

我在尝试root模拟器时遇到了这个问题,我发现这是因为我正在运行带有Google Play的Nexus 5x模拟器。创建了一个没有谷歌播放的不同模拟器,adb root将为您设备。希望这有助于某人。

答案 6 :(得分:1)

就我而言,(设备已植根)

linux$ adb shell      #  in linux shell
mobile$ su root       #=> notice the $ will become #
mobile# whoami        #=> root

如果您在 Magisk 中安装了“adb root”模块,您仍然需要通过 root 手动切换到 su root,否则,看起来您是 root,但实际上您不是 root。

答案 7 :(得分:1)

我有一台运行 Android 7.0 的三星 Galaxy Tab S2。 以下是我今天如何扎根:

  1. Root the device using Odin

  2. 阅读此线程中关于编辑 system\build.prop 文件的 Alex P.'s answer

  3. 下载到您的平板电脑上:v1.3.9 System Tools Android: All-In-One toolbox

  4. 运行应用程序;在“系统实用程序”下确认您的 Odin 根使用“根检查”

  5. 在同一个应用程序中,转到“Root Manager”并使用“Build.prop editor”来影响 system\build.prop 中的更改(由 Alex P. 指定)。

最终确认:

C:\Android\sdk\platform-tools>adb shell
gts28vewifi:/ $ whoami
shell
gts28vewifi:/ $ su
gts28vewifi:/ # su root
gts28vewifi:/ # whoami
root
  1. 为 Alex P. 的回答点赞。

Further info and here and here too

答案 8 :(得分:0)

如果您确实需要<jnlp spec="1.0+" codebase="http://192.168.2.40/New" href="index.jnlp"> <information> <title>Safety</title> <homepage href="/Safety" /> <Application-Name>Safety</Application-Name> <icon href="Safety.gif"/> <icon kind="shortcut" href="Safety.jpeg" width="32" height="32"/> <icon kind="shortcut" href="Safety.jpeg" width="48" height="48"/> <icon kind="splash" href="index.jpeg"/> <offline-allowed/> <shortcut online="true"> <desktop/> <menu submenu="Safety Home"/> </shortcut> </information> <update check="always" policy="prompt-update"/> <security> <all-permissions/> </security> <resources os="Windows" arch="x86_64 amd64"> <j2se version="1.6+" max-heap-size="2000m"/> </resources> <resources os="Linux" arch="x86_64 amd64"> <j2se version="1.6+" max-heap-size="2000m"/> </resources> <resources> <j2se version="1.6+"/> <jar href="Safety-maven-1.0.13.jar" /> </resources> <application-desc main-class="in.NewFrame" /> </jnlp> 作为ADB运行,最快捷最简单的方法是安装Android自定义ROM,最流行的是root,因为它有{{1}开发人员选项菜单中的选项,您可以在其中选择授予CyanogenMod的root访问权限。之前我使用过CM,但由于它还没有开发,我试着寻找一些解决方案。虽然CyanogenMod仍然是一个很好的选择,因为它没有臃肿软件。

我从朋友那里发现的一个替代方法是使用Root Access应用,您可以在此处尝试:https://forum.xda-developers.com/showthread.php?t=1687590。在我的情况下,它与Android自定义内核一起工作,但不适用于Android股票ROM(仅限vanilla android)。您可以尝试其他替代方案,例如修改Android ROM的apps and ADB

答案 9 :(得分:0)

adbd具有启用根访问权限的编译标志/选项:ALLOW_ADBD_ROOT=1

直到Android 9:如果您的设备上的adbd编译时都没有该标志,则它将在启动时始终放弃特权,因此“ adb root”根本无济于事。 我不得不修补对setuid()setgid()setgroups()的调用,而我自己的能力就从二进制文件中删除了,从而在我的电子书阅读器上获得了永久扎根的adbd。

在Android 10中,此更改;当手机/平板电脑解锁(ro.boot.verifiedbootstate == "orange")时,则在任何情况下都可以使用adb root模式。