我需要在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
-
使模拟器的系统分区可写
注意:先导航到安装了Android SDK的工具文件夹,然后按Shift并右键单击打开命令提示符。
-
导入su二进制文件到系统目录
重要!只能使用与avd体系结构(如x86,arm等)相匹配的su二进制文件,并记下您提取这些二进制文件的路径。
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二进制文件的权限
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)
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及更高版本测试过。
参考文献
- How to get root access on Android emulator?
|