我有所有Android SDK版本(从1.5到2.3.3),我尝试了很多方法在Android模拟器中获取root权限。我不使用任何Android设备并在模拟器(AVD)上测试所有内容。
我需要在任何一个Android模拟器中获得root访问权限才能使用'iptables'和'busybox'功能。要使用iptables,我必须具有root访问权限。 Atleast'su'命令应该在终端仿真器中执行。
我还安装了z4root
应用程序,
但它需要很长时间,并没有完成生根,并陷入困境。有人说如果我们将系统降级到RC30以下,这样我们就可以获得root访问权限。如果这是真的,那怎么办呢?我同时使用Linux和Windows操作系统。
请有人告诉我任何根我的模拟器的方法。
这些答案都是不必要的复杂:)
$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
我只是替换并为su分配属性〜/ Android / Sdk / system-images / android-22 / google_apis / x86 / system.img现在在android 5上我甚至对新系统都有root,它足以安装SuperSu。 APK
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
之后,SuperSu.apk看到root。但我不更新二进制文件
如何root android模拟器(在Android 7.1.1 / Nougat上测试)
要求:
说明
adb -e install supersu.apk
进行侧载)
安装后,运行时会显示如下所示的屏幕,显示“没有安装SU二进制文件..”。此错误只是确认设备尚未生根。emulator.exe -avd {emulator_name} -writable-system
注意:导航到安装了Android SDK的tools文件夹,然后按shift并右键单击打开命令提示符。
重要!只使用与你的avd架构匹配的su二进制文件,例如x86,arm等..,并记下你提取这些二进制文件的路径。
adb root
adb remount
现在是推动su二进制文件的时候了:
这是我成功使用的代码:adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su
(没关系我的su二进制文件的具体位置,任何位置都可以,只要没有空格)
注意:要在控制台中找出bin
或xbin
之前:> adb shell
,> ls /system/xbin/su
如果失败,请尝试将此推送到此目录,而不是/system/xbin/su
。对于运行Android 5.1及以下版本的模拟器,也使用su
而不是su.pie
adb -e shell
su root
cd /system/bin
chmod 06755 su
重要!!记下su二进制路径(我的是/ system / bin)
install
指令并设置daemon
输入代码:
su --install
并设置守护进程:
su --daemon&
重要!!注意间距
setenforce 0
注意:如果您遇到bootloops,而不是更新二进制文件,只需按原样使用它。
这就是它!
打开任何需要SU权限的应用程序只是为了仔细检查,事实上SuperSU会询问你是否希望授予它su权限。
要使root持久化更新su二进制(使用Normal方法),然后从temp目录复制system.img(Users\AppData\Local\Temp\Android Emulator
文件通常被随机命名为例如大尺寸的1359g.tmp
)并替换默认的system.img
。
更新:
我注意到在Linux中比在Windows中更容易获得临时系统映像。您可以尝试使用快照图像。
随着模拟器27.3.x
的出现,它现在通过快照功能更容易保存root(如果复制system.img
方法不起作用):
理想情况下,它更像hibernarig配置完整的虚拟设备,因此一切都被保留。
快照
您现在可以为给定的设备配置保存多个AVD快照,并选择在启动仿真器时要加载哪些已保存的快照。通过加载快照启动虚拟设备非常类似于从睡眠状态唤醒物理,而不是从关闭状态启动它。
这意味着启动模拟器的唯一要求是将-writable-system
参数添加到普通的emulator -avd [avdname]
命令以启动模拟器。 (仅使用emulator -avd [avdname]
运行模拟器不会启动rooted版本/副本或可能导致某些错误)
在API级别22上测试
另外对于bootloop问题,请参阅另一篇文章:Android Emulator: How to avoid boot loop after rooting?及其更新。
备注
参考的大多数内容是针对较旧的Android版本,因此我修改了不同命令和路径的原因。
致谢;
以下是模拟器运行时必须运行的命令列表,我在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。每次启动模拟器时都需要运行这些命令。您可以编写一个启动模拟器并将其root化的脚本。
对于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中更新二进制文件并从temp文件夹存储system.img作为默认system.img的替换。
如何在永久性上转换生成的临时根
首先 - 它去SuperSu。它提供二进制升级。以正常方式更新。重新启动拒绝。
第二 - 仅与模拟器相关。同样的AVD。底线是不会保存系统映像中的更改。你需要为自己保留它们。
对于不同的仿真器,已经有不同的指令。
对于AVD,您可以尝试查找临时文件system.img,将其保存在某处并在启动模拟器时使用。
在Windows中,它位于%LOCALAPPDATA%\Temp\AndroidEmulator
,其名称类似于TMP4980.tmp
。
您将其复制到文件夹avd device(%HOMEPATH%\.android\avd\%AVD_NAME%.avd\
),并重命名为system.img
。
现在它将在开始时使用,而不是通常的。如果SDK中的图像已更新,则为True,它将具有旧图像。
在这种情况下,您需要删除此system.img
,并在其创建时重复该操作。
更详细的俄语手册:http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931
对于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运行任何其他命令,例如qazxsw poi。
另一个步骤保持不变 - 上传二进制文件,运行二进制文件作为守护进程等等。
图片来自AVD Android 7 x86与root:mount -o remount,rw /system
如果在执行二进制文件时看到关于PIE的错误 - 那么你上传到模拟器错误的二进制文件。您必须在归档文件中上传名为su
的二进制文件,但在模拟器上它必须命名为su.pie
,而不是su
。
我相信最简单的方法是为命令su.pie
创建一个别名,例如
sh
在Android Emulator 3.0及更高版本上测试过。
adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
我的所有你需要的包。或者您可以使用此脚本:
Here
尝试其他方式来解决这个问题。
使用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模拟器。这是默认的根源。它更容易,更像普通手机。它是免费供个人使用。
我发现了这个问题,因为我想在Default Android Emulator上安装Xposed框架。该安装需要root和flash以及自定义恢复(例如TWRP),对于默认Android模拟器来说都很困难。最后我使用了Genymotion,所有这些都在几分钟内完成。
我使用了上述解决方案中的部分方法;但是,它们没有完全发挥作用。在Andy的最新版本中,这对我有用:
On Andy(Root Shell)[要获取,请右键单击HandyAndy图标并选择Term Shell]
在shell中,运行以下命令:
Genymotion
然后,安装SuperSU并安装SU二进制文件。这将取代我们刚刚创建的SU二进制文件。 (可选)删除SuperSU并通过CWM安装超级用户。再次安装su二进制文件。现在,root工作!
我尝试了很多上面的建议,包括SuperSU,但是找不到任何工作,但发现了一些更简单的东西,这对我的目的有用。就我而言,我只想在命令提示符下运行sqlite。我只是使用旧版本的Android(Lollipop)启动模拟器并立即获得root访问权限。