对于带有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。将它们解压到任何文件夹中。创建批处理文件并填写上述内容。不要忘记指定必要的架构和设备:
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的替换。
如何将结果的临时root转换为永久性:
首先-进入SuperSu。它提供了一个二进制升级。以正常方式更新。拒绝重启。
其次-仅适用于模拟器。相同的AVD。问题在于系统映像中的更改不会被保存。您需要将它们保留给自己。
对于不同的模拟器已经有了不同的说明。
对于AVD,您可以尝试查找临时文件system.img,将其保存在某个地方,并在启动模拟器时使用。
在Windows中,它位于
%LOCALAPPDATA%\Temp\AndroidEmulator
,名称类似于
TMP4980.tmp
。
您需要将其复制到一个名为avd device的文件夹(
%HOMEPATH%\.android\avd\%AVD_NAME%.avd\
),并将其重命名为
system.img
。
现在,在启动时将使用它,而不是通常使用的那个。如果SDK中的映像已更新,则会有旧映像。
在这种情况下,您需要删除此
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
您需要以root权限重新启动adbd
:
adb -s emulator-5554 root
并且重新挂载系统:
adb -s emulator-5554 remount
每次运行模拟器只能执行一次。任何其他的重新挂载都可能会破坏写入模式。因此,您不需要运行任何其他带有重新挂载的命令,例如mount -o remount,rw /system
。
其他步骤保持不变 - 上传二进制文件,将其作为守护程序运行等等。
AVD Android 7 x86 带有 root 权限的图片:
如果您在执行
su
二进制文件时看到与PIE有关的错误 - 那么您上传到模拟器的二进制文件是错误的。您必须在存档中上传名为
su.pie
的二进制文件,但在模拟器上,它必须被命名为
su
,而不是
su.pie
。