Android emulator 如何在Android emulator上获得root访问权限?

Android emulator 如何在Android emulator上获得root访问权限?,android-emulator,root,Android Emulator,Root,我有所有的Android SDK版本(从1.5到2.3.3),并且我尝试了许多在Android emulator中获得根目录的方法。我不使用任何Android设备,在emulator(AVD)上测试所有东西 我需要在任何一个Android emulator中获得根访问权限才能使用“iptables”和“busybox”功能。要使用iptables,我必须具有root访问权限。至少应在终端仿真器中执行“su”命令 我还安装了z4root应用程序 但是它需要很长时间,没有完成生根,并且会被卡住。有人

我有所有的Android SDK版本(从1.5到2.3.3),并且我尝试了许多在Android emulator中获得根目录的方法。我不使用任何Android设备,在emulator(AVD)上测试所有东西

我需要在任何一个Android emulator中获得根访问权限才能使用“iptables”和“busybox”功能。要使用iptables,我必须具有root访问权限。至少应在终端仿真器中执行“su”命令

我还安装了
z4root
应用程序

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


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

以下是在模拟器运行时必须运行的命令列表,我在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
它假定su二进制文件位于工作目录中。您可以在此处找到su和超级用户:。
每次启动emulator时都需要运行这些命令。您可以编写一个脚本来启动emulator并将其根目录。

我认为最简单的方法是为命令
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.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更新.zip。将它们解压缩到任何文件夹。使用上面的内容创建bat文件。不要忘记指定必要的体系结构和设备:
set adb=adb-s emulator-5558
set arch=x64
。如果您运行的Android高于或等于5.0,请将
set pie=
更改为
set pie=.pie
。运行它。您将获得当前运行的临时根目录

若在重新安装系统分区时出错,那个么需要从命令行启动AVD。请参见以下Android 7的第一步

如果您想使其持久化,请在SuperSU中更新二进制文件,并将temp文件夹中的system.img存储为default system.img的替换项

如何将生成的临时根转换为永久根

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

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

已经有针对不同模拟器的不同指令

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

在Windows中,它位于
%LOCALAPPDATA%\Temp\AndroidEmulator
中,名称类似于
TMP4980.tmp

您将其复制到文件夹avd设备(
%HOMEPATH%\.android\avd\%avd\u NAME%.avd\
)中,并重命名为
system.img

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

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

更详细的俄语手册:


对于android 7,您需要运行其他步骤: 1.需要手动运行模拟器。 转到sdk文件夹
sdk\tools\lib64\qt\lib
。 使用选项
-可写系统-禁用selinux从该文件夹运行emulator
像这样:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  • 您需要从根目录重新启动adbd
  • adb-s emulator-5554根目录

    并重新安装系统:

    adb -s emulator-5554 remount
    
    每次运行emulator只能执行一次。任何其他重新装载都可能中断写入模式。因此,您不需要使用remount运行任何其他命令,如
    mount-oremount、rw/system

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

    来自AVD Android 7 x86和root的图片:



    若您在execute
    su
    binary上看到关于饼图的错误,那个么您将错误的二进制文件上传到emulator。您必须在归档文件中上载名为
    su.pie
    的二进制文件,但在emulator上它必须命名为
    su
    ,而不是
    su.pie
    ,我使用了上述解决方案中的部分方法;然而,它们并没有完全起作用。在最新版本的《安迪》中,这对我很有用:

    在Andy(根Shell)[要获取,右键单击HandyAndy图标并选择术语Shell]

    在shell中,运行以下命令:

    mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
    cd /system/bin
    cat sh > su && chmod 4775 su
    
    然后,安装SuperSU并安装SU二进制文件。这将替换我们刚刚创建的SU二进制文件。 (可选) 通过CWM删除SuperSU并安装Superuser。再次安装su二进制文件。
    现在,根工作

    如果您有一个具有root访问权限的虚拟设备,那么这应该可以完成以下任务:

    $ > adb shell
    generic_x86:/ $
    generic_x86:/ $ exit
    $ > adb root
    restarting adbd as root
    $ > adb shell
    generic_x86:/ #
    
    如果您没有,您可能会对这个问题感兴趣,并提出另一个问题,该问题解释了如何创建一个具有根访问权限的虚拟设备,该虚拟设备使用Google API(也称为Google Play服务),但不使用Google Play应用程序


    如果您真的需要Google Play应用程序,您可能会对指导如何根目录Android虚拟设备的其他答案感兴趣。

    如何根目录Android emulator(在Android 7.1.1/Nougat上测试)

    要求

    • (这里是XDA用户为主链接不工作时的可闪动拉链提供的备用链接:)

    说明

  • 安装SuperSu.apk

    • 首先安装SuperSu应用程序,只需拖放即可(如果通过adb运行最新的emulator版本或侧向加载,即
      adb-e Install SuperSu.apk

    • 安装后,当您运行它时,它会显示如下所示的屏幕,指示“没有安装SU二进制文件…”。此错误仅确认设备尚未根目录


  • 使模拟器的系统分区可写

    • 正如它所建议的,我们需要给模拟器写系统fi的权限
      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
      
      Android 6 is necessary only
      adb root
      adb shell
      >/system/xbin/su --daemon &
      >setenfoce 0