如何在Android模拟器上获得root访问权限?

Pre*_*tam 129 root android-emulator

我有所有Android SDK版本(从1.5到2.3.3),我尝试了很多方法在Android模拟器中获取root权限.我不使用任何Android设备并在模拟器(AVD)上测试所有内容.

我需要在任何一个Android模拟器中获得root访问权限才能使用'iptables'和'busybox'功能.要使用iptables,我必须具有root访问权限.Atleast'su'命令应该在终端仿真器中执行.

我还安装了z4root应用程序,

但它需要很长时间,并没有完成生根,并陷入困境.有人说如果我们将系统降级到RC30以下,这样我们就可以获得root访问权限.如果这是真的,那怎么办呢?我同时使用Linux和Windows操作系统.

请有人告诉我任何根我的模拟器的方法.

JRa*_*ond 115

这些答案都是不必要的复杂:)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
Run Code Online (Sandbox Code Playgroud)

  • 运行`adb root`会导致"adbd无法在生产版本中以root身份运行".您使用的是特定的模拟器吗?请提供更多详情. (36认同)
  • 如果`adb root`给出错误'adbd无法在生产版本中以root身份运行',请参阅/sf/answers/3196798881/ - 您需要"Google API系统映像"而不是"Google Play"系统映像". (30认同)
  • @JRaymond我输入了adb根目录,但此后未打印任何内容 (6认同)
  • 如果有人试图将其用于新的Google Play系统映像,则adbd将设置为在ramdisk.img中保护.我能够使用Google API图像中的ramdisk.img来解决这个问题.我测试了7.0和8.0图像. (5认同)
  • 您不能将此根用于任何应用程序。 (4认同)
  • adb shell 和 exit 是不必要的。 (2认同)
  • @Chandler,在我运行命令之前,它们展示了系统的状态,以便给出更完整的答案,假设读者知道根 shell 与常规 shell 的样子 (2认同)

xav*_*rat 66

如何root android模拟器(在Android 7.1.1/Nougat上测试)

要求:

说明

  1. 安装SuperSu.apk

    • 首先安装SuperSu应用程序,只需拖放(如果运行最新的模拟器版本或通过adb即侧载adb -e install supersu.apk)

    • 安装后,运行时会显示如下所示的屏幕,显示"没有安装SU二进制文件..".此错误只是确认设备尚未生根.

在此输入图像描述


  1. 使模拟器的系统分区可写

    • 正如它所暗示的,我们需要赋予模拟器写入系统文件的权限.

    • 键入以下代码以完成此操作: emulator.exe -avd {emulator_name} -writable-system

注意:导航到安装了Android SDK 的tools文件夹,然后按shift并右键单击打开命令提示符.


  1. 在系统目录中推送su二进制文件

    • 提取Recovery flashable.zip(包含不同体系结构的su二进制文件)

重要!只使用与你的avd架构相匹配的su二进制文件,例如x86,arm等..,并记下你提取这些二进制文件的路径.

  • 确保以root身份运行adb,并且还需要重新安装.只需输入这些代码

adb root

adb remount

现在是推动su二进制文件的时候了:

这是我成功使用的代码:adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(没关系我的su二进制文件的具体位置,任何位置都可以,只要没有空格)

注意:在控制台之前弄清楚binxbin做:> adb shell,>ls /system/xbin/su

如果失败,请尝试将此推送到此目录/system/xbin/su.此外,对于运行Android 5.1及以下版本的模拟器,请使用su和不使用su.pie


  1. 更改su二进制文件的权限

    • 接下来让我们对su二进制文件的权限进行一些修改.我们必须通过adb在模拟器设备中执行此操作:

    adb -e shell su root cd /system/bin chmod 06755 su

重要!!记下su二进制路径(我的是/ system/bin)


  1. install在su二进制上设置指令并设置一个daemon

输入代码:

su --install

并设置守护进程:

su --daemon&

重要!!注意间距


  1. 将SELinux设置为Permissive(即关闭SE Linux)

    • 最后通过以下代码关闭selinux:

setenforce 0


  1. 打开SuperSU应用程序,它可能会要求更新二进制文件,您可以使用Normal方法.

注意:如果您遇到bootloops,而不是更新二进制文件,只需按原样使用它.


这就是它!

打开任何需要SU权限的应用程序只是为了仔细检查,事实上SuperSU会询问你是否希望授予它su权限.

在此输入图像描述

要使root持久化更新su二进制文件(使用Normal方法),然后从temp目录复制system.img(Users\AppData\Local\Temp\Android Emulator该文件通常是随机命名的,例如1359g.tmp大小)并替换default system.img.

更新:

我注意到在Linux中比在Windows中更容易获得临时系统映像.您可以尝试使用快照图像.

2018年8月4日更新

随着模拟器的出现,27.3.x它现在通过快照功能更容易保存root(如果复制system.img方法不起作用):

理想情况下,它更像hibernarig配置完整的虚拟设备,因此一切都被保留.

快照

您现在可以为给定的设备配置保存多个AVD快照,并选择在启动仿真器时要加载哪些已保存的快照.通过加载快照启动虚拟设备非常类似于从睡眠状态唤醒物理,而不是从关闭状态启动它.

这意味着启动模拟器的唯一要求是将-writable-system参数添加到正常emulator -avd [avdname]命令以启动模拟器.(仅使用运行模拟器emulator -avd [avdname]不会启动rooted版本/副本或可能导致一些错误)

在API级别22上测试

另外对于bootloop问题,请参阅另一篇文章:Android Emulator:如何在生根后避免引导循环?及其更新.

备注

参考的大多数内容是针对较旧的Android版本,因此我修改了不同命令和路径的原因.

致谢;

  • 我正在使用 Pixel 2 XL:人们似乎对 Pixel XL 有同样的问题:https://forum.xda-developers.com/pixel-xl/how-to/guide-pixel-xl-android-9- 0-pie-unlock-t3825866/page2 (2认同)
  • 这里缺少一个步骤 - 在第 1 步之后,您需要关闭模拟器。因为步骤 2 中的命令实际上是在启动模拟器...如果不关闭它,您将收到一条错误消息,指出运行多个模拟器是一项实验性功能 (2认同)
  • 第一个链接已失效 (2认同)
  • adb root adbd 无法在生产版本中以 root 身份运行 (2认同)

a.b*_*b.d 33

以下是模拟器运行时必须运行的命令列表,我在Android 2.2上测试此解决方案的avd:

adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system  
adb push su /system/xbin/su  
adb shell chmod 06755 /system  
adb shell chmod 06755 /system/xbin/su
Run Code Online (Sandbox Code Playgroud)

它假定su二进制文件位于工作目录中.你可以在这里找到su和超级用户:http://forum.xda-developers.com/showthread.php?t = 682828.每次启动模拟器时都需要运行这些命令.您可以编写一个启动模拟器并将其root化的脚本.

  • 请在此处提供您博客文章的相关部分.SO是一个答案的地方,而不是链接. (15认同)
  • 这在模拟器2.2,2.3或2.3.3上不起作用我只得到adb push的错误:内存不足,dir不为空等等. (4认同)
  • 没有这样的文件或目录'SU' (2认同)
  • @mice:由于错误说你无法推送二进制文件,因为虚拟设备上没有足够的空间.启动模拟器时,可以添加`-partition-size`选项以指定分区大小.尝试使用`tools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256启动模拟器 (2认同)
  • 在较新的模拟器上,remount命令可能不起作用,你可以替换:`adb shell mount -o rw,remount -t yaffs2/dev/block/mtdblock03/system` with:`adb root``adb remount` (2认同)

Eny*_*yby 20

对于5.1.1和6.0的AVD,我在windows中使用了下一个脚本:

set adb=adb -s emulator-5558
set arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% shell mount -o remount,rw /system
%adb% shell setenforce 0
%adb% install common/Superuser.apk
%adb% push %arch%/su%pie% /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push %arch%/su%pie% /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
rem %adb% shell mount -o remount,ro /system

exit /b
Run Code Online (Sandbox Code Playgroud)

需要来自SuperSU的UPDATE.zip.将它们解压缩到任何文件夹.使用上面的内容创建bat文件.不要忘记指定必要的架构和设备:set adb=adb -s emulator-5558set arch=x64.如果您运行的Android高于或等于5.0,请更改set pie=set pie=.pie.运行.您获得当前运行的临时root.

如果在重新安装系统分区时遇到错误,则需要从命令行启动AVD.请参阅以下Android 7的第一步.

如果你想让它持久化 - 在SuperSU中更新二进制文件并从temp文件夹存储system.img作为默认system.img的替换.

如何在永久性上转换生成的临时根

首先 - 它去SuperSu.它提供二进制升级.以正常方式更新.重新启动拒绝.

第二 - 仅与模拟器相关.同样的AVD.底线是不会保存系统映像中的更改.你需要为自己保留它们.

对于不同的仿真器,已经有不同的指令.

对于AVD,您可以尝试查找临时文件system.img,将其保存在某处并在启动模拟器时使用.

在Windows中它位于%LOCALAPPDATA%\Temp\AndroidEmulator并且有一个类似的名称TMP4980.tmp.

您将其复制到文件夹avd device(%HOMEPATH%\.android\avd\%AVD_NAME%.avd\),并重命名为system.img.

现在它将在开始时使用,而不是通常的.如果SDK中的图像已更新,则为True,它将具有旧图像.

在这种情况下,您需要删除它system.img,并在其创建时重复该操作.

更详细的俄语手册:http://4pda.ru/forum/index.php?showtopic = 318487&view = findpost&p = 45421931


对于Android 7,您需要运行其他步骤:1.需要手动运行模拟器.转到sdk文件夹sdk\tools\lib64\qt\lib.从这个文件夹模拟器运行与选项-writable-system -selinux disabled 像这样:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
Run Code Online (Sandbox Code Playgroud)
  1. 您需要adbd从root 重启:

    adb -s emulator-5554 root

并重新安装系统:

adb -s emulator-5554 remount
Run Code Online (Sandbox Code Playgroud)

每个运行模拟器只能输入一次.而任何其他重新安装都可以打破写入模式.因此,您不需要使用remount运行任何其他命令,例如mount -o remount,rw /system.

另一个步骤保持不变 - 上传二进制文件,运行二进制文件作为守护进程等等.

图片来自AVD Android 7 x86 with root: AVD Android 7 x86与root


如果您在执行su二进制文件时看到有关PIE的错误- 那么您上传到模拟器错误的二进制文件.您必须上传名为su.pieinside archive的二进制文件,但在模拟器上它必须命名为su,而不是su.pie.


new*_*bie 12

我相信最简单的方法是为命令创建一个别名sh,例如

adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
Run Code Online (Sandbox Code Playgroud)

在Android Emulator 3.0及更高版本上测试过.

  • 我有`mount:'/ system'不在/ proc / mounts中 (4认同)

met*_*vsk 12

  1. 应使用没有“Play Store”的虚拟设备。注意:如果模拟设备中已有一些数据库,您可以创建一个新数据库或编辑现有数据库的设置。

  2. 创建 avd并运行后,在任何地方打开终端 > 在 android studio 中或从开始菜单

  3. 运行 adb root

现在您可以使用adb shell打开设备外壳窗口。

如果您的物理设备已连接开发者选项,您将收到类似“adb.exe:多个设备/模拟器”的消息,在这种情况下,您可以使用命令“adb -e shell”

对于 adb shell 初学者来说其他有用的注释:

运行“ls”查看所有文件。cd 更改目录。目录名的一些字母+ TAB 自动完成名称。'..' 回去。


Hem*_*uri 6

我知道这个问题很老了。但是我们可以通过 Magisk 的帮助在模拟器中获得 root 权限,方法如下:https://github.com/shakalaca/MagiskOnEmulator

基本上,它修补 initrd.img(如果存在)和 ramdisk.img 以与 Magisk 一起使用。


wyx*_*wyx 5

https://github.com/newbit1/rootAVD 拯救我的生命。

它由 Magisk root

该脚本对用户来说足够简单 在此输入图像描述