• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我需要在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二进制文件位于工作目录。可以在这里找到susuperuser:http://forum.xda-developers.com/showthread.php?t=682828。

第三种解决办法

如何获取Android模拟器的Root权限(在Android 7.1.1 /Nougat测试过)

要求:

  • SuperSU app (chainfire) latest version 2.82

  • Recovery flashable.zip (包含su二进制文件)

说明

  1. 安装SuperSu.apk

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

    • 安装完成后,运行时会显示如下所示的屏幕,显示“没有安装SU二进制文件..”。这个错误只是确认设备还没有 root 权限。


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

    • 需要给模拟器写入系统文件的权限。

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

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


  1. 导入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

注意:在控制台找出binxbin:> adb shell,> 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

重要!!记下su二进制路径(比如,这里是/system/bin)


  1. 在su binary上设置install指令并设置daemon

输入代码:

su --install

并设置守护进程:

su --daemon&

重要!!注意间距


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

    • 最后通过这个代码关闭selinux:

setenforce 0


  1. 打开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-5558set 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
  1. 需要从根目录重新启动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?


鲜花

握手

雷人

路过

鸡蛋
专题导读
上一篇:
“git pull”如何强制覆盖本地文件?发布时间:2022-05-14
下一篇:
在TensorFlow中,Session.run()和Tensor.eval()有什么区别?发布时间:2022-05-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap