我需要在Android模拟器中获得root权限,从而使用’iptables’和’busybox’功能。
尝试安装了z4root
应用程序,
但需要很长时间,且没有完成获取root就卡住了。有人说如果我们把系统降级到RC30以下,就可以获得root权限了。如果这是真的,那该怎么做呢?我使用Linux和Windows两种操作系统。
最佳解决办法
答案其实可以比较简单:)
$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
次佳解决办法
当模拟器运行时,执行以下命令列表,我在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
和superuser
:http://forum.xda-developers.com/showthread.php?t=682828。
第三种解决办法
如何获取Android模拟器的Root权限(在Android 7.1.1 /Nougat测试过)
要求:
说明
-
安装SuperSu.apk
-
首先安装SuperSu应用程序,只需拖放(如果运行最新的模拟器版本,或通过adb做sideload,即
adb –e install supersu.apk
) -
安装完成后,运行时会显示如下所示的屏幕,显示“没有安装SU二进制文件..”。这个错误只是确认设备还没有 root 权限。
-
-
使模拟器的系统分区可写
-
需要给模拟器写入系统文件的权限。
-
输入以下代码来完成此操作:
emulator.exe âavd {emulator_name} âwritable-system
-
注意:先导航到安装了Android SDK的工具文件夹,然后按Shift并右键单击打开命令提示符。
-
导入su二进制文件到系统目录
-
解压flashable.zip(包含不同体系结构的su二进制文件)
-
重要!只能使用与avd体系结构(如x86,arm等)相匹配的su二进制文件,并记下您提取这些二进制文件的路径。
-
确保以root身份运行adb,并且需要remount。只需输入这些代码
adb root
adb remount
然后push su二进制文件:
使用的代码:adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su
注意:在控制台找出bin
或xbin
:> adb shell
,> ls /system/xbin/su
如果失败,请尝试将这个目录改为/system/xbin/su
。另外运行Android 5.1及以下版本的模拟器,使用su
而不是su.pie
-
更改su二进制文件的权限
-
接下来对su二进制的权限做一些修改。必须通过adb在模拟器中做到这一点:
adb –e shell
su root
cd /system/bin
chmod 06755 su -
重要!!记下su二进制路径(比如,这里是/system/bin)
-
在su binary上设置
install
指令并设置daemon
输入代码:
su --install
并设置守护进程:
su --daemon&
重要!!注意间距
-
将SELinux设置为Permissive(即关闭SE Linux)
-
最后通过这个代码关闭selinux:
-
setenforce 0
-
打开SuperSU应用程序,它可能会要求更新二进制文件,您可以使用Normal方法。
注意:如果您遇到bootloops,请不要更新二进制文件,只需按照原样使用即可。
到这里差不多就可以了!
打开任何需要SU权限的应用程序,仔细检查确实SuperSU会询问您是否希望授予它权限。
要让root持久更新su二进制文件(使用Normal方法),将system.img从临时目录(Users\AppData\Local\Temp\Android Emulator
中复制,该文件通常是随机命名的,例如1359g.tmp
具有较大的大小),并替换默认的system.img
。
第四种办法
对于使用5.1.1和6.0的AVD:
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
。运行,获得当前运行的临时根目录。
如果在重新安装系统分区时出现错误,则需要从命令行启动AVD。请参阅下面的Android 7的第一步。
如果想让它持久化 – 在SuperSU中更新二进制文件,并将临时文件夹中的system.img文件保存为默认的system.img文件。
如何将生成的临时根目录转换为永久的?
首先是SuperSu。它提供了一个二进制升级。以正常方式更新,不要Reboot。
其次 – 只与模拟器相关。相同的AVD。底线是系统映像中的更改不会被保存。需要自己保持。
对于不同的模拟器已经有不同的说明。
对于AVD,可以尝试找到一个临时文件system.img,将其保存在某处并在启动模拟器时使用。
在Windows中,它位于%LOCALAPPDATA%\Temp\AndroidEmulator
中,并且有一个类似TMP4980.tmp
的名称。
将其复制到文件夹avd设备(%HOMEPATH%\.android\avd\%AVD_NAME%.avd\
),并重命名为system.img
。
对于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
-
需要从根目录重新启动
adbd
:adb -s emulator-5554 root
重新安装系统:
adb -s emulator-5554 remount
每次运行模拟器只能使用一次。而任何另一个remount可以破坏写入模式。因此,不需要运行任何其他重新mount的命令,如mount -o remount,rw /system
。
另一个步骤保持不变 – 上传二进制文件,运行二进制文件等等。
来自AVD Android 7 x86的图片:
如果在执行su
二进制文件时看到关于PIE的错误,那么可能是上传到仿真器二进制文件有误。必须在归档文件中上传名为su.pie
的二进制文件,但在仿真器上必须命名为su
,而不是su.pie
。
第五种办法
最简单的方法是为命令sh
创建一个别名,例如
adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
在Android模拟器3.0及更高版本测试过。