我有所有的Android SDK版本(从1.5到2.3.3),我试过很多方法在Android模拟器上获得root。我不使用任何安卓设备,在模拟器(AVD)上测试一切。
我需要在任何一个安卓模拟器中获得root权限,以使用'iptables'和'busybox'功能。而要使用iptables,我必须有root权限。至少'su'命令应该在终端模拟器中执行。
我还安装了z4root
应用程序。
但它花了很长时间,没有完成root,而且卡住了。有人说,如果我们把系统降级到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和超级用户:http://forum.xda-developers.com/showthread.php?t=682828。 你需要在每次启动仿真器时运行这些命令。你可以写一个脚本来启动仿真器并将其置入根目录。
对于使用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-5558
和set arch=x64
。如果你运行的Android高于或等于5.0,把set pie=
改为set pie=.pie
。运行它。你会得到当前运行的临时root。
如果你在重挂系统分区时遇到错误,那么你需要从命令行启动AVD。见下面Android 7的第一步。
如果你想让它持久化--更新SuperSU中的二进制文件,并从临时文件夹中存储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中的图像被更新,它将拥有旧的图像。
在这种情况下,你需要删除这个system.img
,并重复创建它的操作。
更详细的俄语手册:http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931
对于安卓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
2.你需要从根目录下重新启动adbd
。
adb -s emulator-5554 root
并重新挂载系统。
adb -s emulator-5554 remount
每次运行仿真器只能重挂一次。任何其他重挂都会破坏写模式。因此,你不需要运行任何其他命令,比如 "mount -o remount,rw /system"。
其他步骤保持不变--上传二进制文件,作为守护程序运行二进制文件,等等。
图片来自AVD Android 7 x86的root版本。 ![AVD Android 7 x86 with root][1]。
如果你在执行su
二进制文件时看到关于PIE的错误 - 那么你上传至模拟器的二进制文件是错误的。你必须在存档中上传名为su.pie
的二进制文件,但在模拟器上必须命名为su
,而不是su.pie
。