亚行外壳苏工作,但亚行根不


92

我将解锁的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.**

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

以上都不对我有用。他们所做的就是给SHELL的ROOT访问权限。我想adb root工作,以便无需进入shell就可以执行各种adb命令。


5
在android> 4.3中不起作用。苏不见了。
drdrej 2015年

Answers:


35

通过设计adb root开发命令只建立(即enguserdebug具有ro.debuggable=1默认情况下)。因此,要adb root在其他已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.

9
在哪里可以获取上述的编译可执行文件?
Waqas Bukhary

3
我将ro.debuggable和ro.secure的新值添加到您指定的文件中,但是每次重新启动后它们仍然会被覆盖,并且更改没有任何效果。
Patryk Czachurski

31

在某些对开发人员友好的ROM中,您可以仅在“设置”>“开发人员选项”>“根访问权限”中启用“根访问权限”。之后adb root变为可用。不幸的是,它不适用于市场上的大多数库存ROM。


64
我在开发人员选项中看不到“ Root access”选项。
Amalgovinus

2
@Amalgovinus我认为这取决于您使用的房间。:)
NgaNguyenDuy '16

@NgaNguyenDuy您能确定您使用的是哪个rom吗?
龙虾战斗机

22

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


我们如何区分两种模拟器?
桑杰(Sanjay)

@Sanjay,当您打开Android虚拟设备管理器时,应该会看到Play商店的标签,并且要确保您尝试扎根的设备上没有Play商店图标。
Andrew Steinmetz

1
2020年,这对我有所帮助,但我确实需要一种方法在启用Play商店的设备上实现此功能,而无需植根电话,但不确定它是否
可行

9

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

亚行外壳“苏”


2
在Mac OS上,出现“ / system / bin / sh:su:未找到”错误。有什么建议吗?
Sachin G

@SachinG也许您使用了错误的引号类型?尝试运行此文件adb shell "su -c whoami"
gkpln3

@ gkpln3仍然出现相同的错误。/ system / bin / sh:su:找不到
Sachin G

8

我有一个扎根的三星Galaxy Trend Plus(GT-S7580)。

运行“ adb root”会给我同样的“ adbd无法在生产版本中作为root运行”错误。

对于具有“开发人员选项->根访问权限”的设备,请选择“仅ADB”以提供对该设备的adb根访问权限(如NgaNguyenDuy所建议)。

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

adb shell "su -c netcfg rndis0 dhcp"

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

如果仍然无法正常工作,请检查设备是否已正确植根。如果仍然不走运,请尝试安装自定义ROM,例如Cyanogen Mod,以使“ adb root”起作用。


7

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

三星似乎比其他厂商更难做到这一点。我有一些adbd二进制文件可供您尝试,但是它将需要反编译和使用新二进制文件重新编译boot.img的知识。另外,如果您的引导加载程序已锁定,则不会发生。

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

最后,如果您尝试编写具有SU权限的Windows脚本,则可以使用以下命令样式进行购买...但是,您至少需要(在电话上)向SU权限授予其首次运行时间。 。

adb shell“ su -c ls” <-列出具有su权限的工作目录。亚行外壳“ su -c echo anytext> /data/test.file”

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

-scosler


4

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

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

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


1

如果您确实需要ADB运行as root,则最快和最简单的方法是安装Android Custom ROM,最流行的是在开发人员选项菜单中CyanogenMod提供该Root Access选项,您可以在其中选择对root的访问权限apps and ADB。我以前使用过CM,但是由于它不再开发,所以我尝试在其中寻找一些解决方案。尽管CyanogenMod仍然是一个不错的选择,因为它没有膨胀软件。

我从朋友那里发现的一种替代方法是使用adbd insecure可以在此处尝试的应用程序:https : //forum.xda-developers.com/showthread.php?t=1687590。就我而言,它适用于Android自定义内核,但不适用于Android stock ROM(仅适用于android android)。您也可以尝试其他替代方法,例如修改boot.imgAndroid ROM。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.