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

时间:2011-02-23 18:22:12

标签: android-emulator root

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

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

我还安装了z4root应用程序,

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

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

14 个答案:

答案 0 :(得分:97)

这些答案都不必要地复杂化了:)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #

答案 1 :(得分:60)

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

<强>要求

<强>说明

  1. 安装SuperSu.apk

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

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

  2. enter image description here

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

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

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

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

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

        • 提取Recovery flashable.zip(包含不同体系结构的su二进制文件)
      2. 重要!只使用与你的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:&gt; adb shell,&gt; 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

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

          1. 在su二进制文件上设置install指令并设置daemon
          2. 输入代码:

            su --install

            并设置守护程序:

            su --daemon&

            重要!!记下间距

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

              • 最后通过以下代码关闭selinux:
            2. setenforce 0

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

              2. 注意:如果您正在体验bootloops,而不是更新二进制文件,请按原样使用它。

                这就是它!!

                打开任何需要SU权限的应用程序只是为了仔细检查,而且确实SuperSU询问您是否希望授予它su权限。

                enter image description here

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

                <强>更新

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

                2018年8月4日更新

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

                理想情况下,它更像是hibernarig配置完整的虚拟设备,因此保留了所有内容。

                快照

                  

                您现在可以为给定设备保存多个AVD快照   配置并选择要在加载时保存的快照   启动模拟器。通过加载快照启动虚拟设备是   就像从睡眠状态唤醒物理一样,而不是启动   它处于断电状态。

                这意味着启动模拟器的唯一要求是将-writable-system参数添加到普通emulator -avd [avdname]命令以启动模拟器。 (仅使用emulator -avd [avdname]运行模拟器并不会启动已植根的版本/副本,或者可能会导致某些错误

                在API级别22上测试

                对于bootloop问题,请参阅另一篇文章:Android Emulator: How to avoid boot loop after rooting?及其更新。

                <强>说明

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

                <强>致谢;

答案 2 :(得分:33)

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

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

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

答案 3 :(得分:19)

对于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

需要来自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设备(%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
  1. 您需要从root重启adbd

    adb -s emulator-5554 root

  2. 并重新安装系统:

    adb -s emulator-5554 remount
    

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

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

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

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

答案 4 :(得分:13)

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

adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

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

答案 5 :(得分:2)

Here我的所有你需要的包。 或者你可以使用这个脚本:

echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set arch=x86
set pie=

echo Close all ANDROID emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until ANDROID emulator loading and press any key
pause

%adb% start-server
%adb% root
%adb% remount
%adb% shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% push D:\SuperSU\su\%arch%\su.pie /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push D:\SuperSU\su\%arch%\su.pie /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
pause
exit /b

答案 6 :(得分:2)

尝试其他方式来解决这个问题。

使用Genymotion代替默认Android模拟器。它默认生根。它更容易,更像普通电话。它可以免费供个人使用。

我发现了这个问题,因为我想在Default Android Emulator上安装Xposed框架。该安装需要root和flash以及自定义恢复(例如TWRP),对于默认Android模拟器来说都很困难。最后我使用了Genymotion,所有这些都在几分钟内完成。

答案 7 :(得分:2)

我知道这个问题很老了。但是我们可以通过遵循 https://github.com/shakalaca/MagiskOnEmulator

在 Magisk 的帮助下在 Emulator 中获得 root

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

答案 8 :(得分:1)

我使用了上述解决方案中的部分方法;但是,它们没有完全发挥作用。在Andy的最新版本中,这对我有用:

On Andy(Root Shell)[要获取,请右键单击HandyAndy图标并选择Term Shell]

在shell中,运行以下命令:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

然后,安装SuperSU并安装SU二进制文件。这将取代我们刚刚创建的SU二进制文件。 (可选的) 删除SuperSU并通过CWM安装超级用户。再次安装su二进制文件。 现在,root工作了!

答案 9 :(得分:1)

我尝试了很多上述建议,包括SuperSU,无法让任何工作,但发现了一些更简单的东西,这对我的目的有用。就我而言,我只想在命令提示符下运行sqlite。我只是使用旧版本的Android(Lollipop)启动模拟器并立即获得root访问权限。

答案 10 :(得分:0)

我刚刚将su的属性替换并分配给〜/ Android / Sdk / system-images / android-22 / google_apis / x86 / system.img 现在在android 5上,即使对于新系统,我也始终拥有root用户,足以安装SuperSu.apk

Android 6 is necessary only
adb root
adb shell
>/system/xbin/su --daemon &
>setenfoce 0

之后,SuperSu.apk会看到root。但是我不更新二进制文件

答案 11 :(得分:0)

我发现默认的API 23 x86_64仿真器是默认植根的。

答案 12 :(得分:0)

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

  2. 创建 avd 后并正在运行在任意位置打开终端 > 在 android studio 中或从开始菜单

  3. 运行 adb root

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

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

对于 adb shell 初学者的其他有用说明:

<块引用>

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

答案 13 :(得分:-1)

使用 android 映像没有 PlayServices 然后你就可以运行 add root 并访问你想要的任何东西。