运行 Xposed inside Google Android 带有自定义图像的模拟器
Running Xposed inside Google Android Emulator with custom image
问题描述:
我需要让 droidmon 处理具有预定义参数的特定 android 图像。 Xposed 框架在安装时显示错误,它需要 root 访问权限。
环境:
Google Android Emulator 运行ning 自定义 root Android 4.4.2 x86 映像,内核版本为 3.4.67+(但我有同样的问题3.10+)
使用的参数(+与android itslef无关的额外参数):
- -avd
- -内核
- -ramdisk
- -无缓存
- -selinux 宽容
- -无快照存储
- -详细
- -显示内核
SDK-工具-版本:25.2.2
SDK-平台-工具:24.0.3
Android 配置为允许 apks 的未知来源
已经尝试过:
- 正在重新挂载 /system RW
- 禁用-selinux(xposed 但是需要-selinux 许可)
- 使用 su
从 xposed 和 运行 脚本中提取更新二进制文件
当前状态:
如果我尝试安装 Xposed,我会从模拟器中收到以下日志消息:
[ 355.372965] type=1400 audit(1477138733.355:23): avc: denied { execute } for pid=2796 comm="posed.installer" name="app_process" dev="mtdblock1" ino=7847 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=1
[ 355.372984] type=1400 audit(1477138733.355:24): avc: denied { execute_no_trans } for pid=2796 comm="posed.installer" path="/data/data/de.robv.android.xposed.installer/cache/app_process" dev="mtdblock1" ino=7847 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=1
[ 355.440354] type=1400 audit(1477138733.415:25): avc: denied { read } for pid=2769 comm="posed.installer" name="app_process" dev="mtdblock0" ino=96 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:zygote_exec:s0 tclass=file permissive=1
[ 355.440410] type=1400 audit(1477138733.415:26): avc: denied { open } for pid=2769 comm="posed.installer" name="app_process" dev="mtdblock0" ino=96 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:zygote_exec:s0 tclass=file permissive=1
[ 355.440450] type=1400 audit(1477138733.415:27): avc: denied { getattr } for pid=2769 comm="posed.installer" path="/system/bin/app_process" dev="mtdblock0" ino=96 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:zygote_exec:s0 tclass=file permissive=1
[ 365.476143] type=1400 audit(1477138743.455:28): avc: denied { execute } for pid=2805 comm="Thread-110" name="su" dev="mtdblock0" ino=972 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:su_exec:s0 tclass=file permissive=1
[ 365.476280] type=1400 audit(1477138743.455:29): avc: denied { read open } for pid=2805 comm="Thread-110" name="su" dev="mtdblock0" ino=972 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:su_exec:s0 tclass=file permissive=1
[ 365.476371] type=1400 audit(1477138743.455:30): avc: denied { execute_no_trans } for pid=2805 comm="Thread-110" path="/system/xbin/su" dev="mtdblock0" ino=972 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:su_exec:s0 tclass=file permissive=1
状态更新:
据我所知,图像没有正确植根。我使用 SuperSU-2.78 中打包的 su 二进制文件重新生成了图像。我通过将 system.img 安装到我的 linux 机器上的一个文件夹来操纵 system.img,并将 su 和 daemonsu(基本上是 su 复制并重命名)添加到 /system/xbin/ 并将这两个文件的权限更改为 6755。此外,现在我在 /etc/init.goldfish.sh
的末尾添加了 2 行
#remount /system rw
mount -o rw,remount /system
#start daemonsu as auto-daemon
/system/xbin/daemonsu --auto-daemon
从 SuperSU 安装 Superuser.apk 和合适的 Xposed 版本后,Xposed 最初安装但在重新启动后导致 libdvm.so
中的段错误
终于设法让它工作(需要旧的 sdk 版本(2016 年 11 月之前)
如上述问题所述,仍然需要 SuperSU
低于 3.10 版的内核镜像(kernel-qemu 或 engine classic)
- 以详细模式启动模拟器
- 注意用于在 qemu 中挂载 /system 的临时文件
- 安装 Xposed 但取消重启
- 从 /tmp/android-{username}/emulator-{random chars} 复制临时 system.img 到你的主目录
- 关闭模拟器
- 用您的主目录
覆盖现有system.img
- 再次启动模拟器
- Xposed 现在应该可以运行了
内核版本 3.10+(kernel-ranchu 或真正的沙盒模拟器)
不幸的是,目前还没有从 ranchu-emulator 中修改 system.img 的已知方法,ranchu 似乎会阻止每个写操作。
被阻止的操作让系统认为分区已损坏,因此系统以只读方式重新挂载分区作为安全后备。
找到了两个解决方法:
1.) 在启动模拟器时使用参数-engine classic(因此强制使用kernel-qemu)您可以使用上述步骤进行更改
2.) 使用内核映像较低版本 3.10 以避免模拟器乱码。您可以使用上述步骤,并在应用更改后再次使用之前的内核映像
问题描述:
我需要让 droidmon 处理具有预定义参数的特定 android 图像。 Xposed 框架在安装时显示错误,它需要 root 访问权限。
环境:
Google Android Emulator 运行ning 自定义 root Android 4.4.2 x86 映像,内核版本为 3.4.67+(但我有同样的问题3.10+) 使用的参数(+与android itslef无关的额外参数):
- -avd
- -内核
- -ramdisk
- -无缓存
- -selinux 宽容
- -无快照存储
- -详细
- -显示内核
SDK-工具-版本:25.2.2
SDK-平台-工具:24.0.3
Android 配置为允许 apks 的未知来源
已经尝试过:
- 正在重新挂载 /system RW
- 禁用-selinux(xposed 但是需要-selinux 许可)
- 使用 su 从 xposed 和 运行 脚本中提取更新二进制文件
当前状态:
如果我尝试安装 Xposed,我会从模拟器中收到以下日志消息:
[ 355.372965] type=1400 audit(1477138733.355:23): avc: denied { execute } for pid=2796 comm="posed.installer" name="app_process" dev="mtdblock1" ino=7847 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=1
[ 355.372984] type=1400 audit(1477138733.355:24): avc: denied { execute_no_trans } for pid=2796 comm="posed.installer" path="/data/data/de.robv.android.xposed.installer/cache/app_process" dev="mtdblock1" ino=7847 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=1
[ 355.440354] type=1400 audit(1477138733.415:25): avc: denied { read } for pid=2769 comm="posed.installer" name="app_process" dev="mtdblock0" ino=96 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:zygote_exec:s0 tclass=file permissive=1
[ 355.440410] type=1400 audit(1477138733.415:26): avc: denied { open } for pid=2769 comm="posed.installer" name="app_process" dev="mtdblock0" ino=96 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:zygote_exec:s0 tclass=file permissive=1
[ 355.440450] type=1400 audit(1477138733.415:27): avc: denied { getattr } for pid=2769 comm="posed.installer" path="/system/bin/app_process" dev="mtdblock0" ino=96 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:zygote_exec:s0 tclass=file permissive=1
[ 365.476143] type=1400 audit(1477138743.455:28): avc: denied { execute } for pid=2805 comm="Thread-110" name="su" dev="mtdblock0" ino=972 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:su_exec:s0 tclass=file permissive=1
[ 365.476280] type=1400 audit(1477138743.455:29): avc: denied { read open } for pid=2805 comm="Thread-110" name="su" dev="mtdblock0" ino=972 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:su_exec:s0 tclass=file permissive=1
[ 365.476371] type=1400 audit(1477138743.455:30): avc: denied { execute_no_trans } for pid=2805 comm="Thread-110" path="/system/xbin/su" dev="mtdblock0" ino=972 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:su_exec:s0 tclass=file permissive=1
状态更新:
据我所知,图像没有正确植根。我使用 SuperSU-2.78 中打包的 su 二进制文件重新生成了图像。我通过将 system.img 安装到我的 linux 机器上的一个文件夹来操纵 system.img,并将 su 和 daemonsu(基本上是 su 复制并重命名)添加到 /system/xbin/ 并将这两个文件的权限更改为 6755。此外,现在我在 /etc/init.goldfish.sh
的末尾添加了 2 行#remount /system rw
mount -o rw,remount /system
#start daemonsu as auto-daemon
/system/xbin/daemonsu --auto-daemon
从 SuperSU 安装 Superuser.apk 和合适的 Xposed 版本后,Xposed 最初安装但在重新启动后导致 libdvm.so
中的段错误终于设法让它工作(需要旧的 sdk 版本(2016 年 11 月之前)
如上述问题所述,仍然需要 SuperSU
低于 3.10 版的内核镜像(kernel-qemu 或 engine classic)
- 以详细模式启动模拟器
- 注意用于在 qemu 中挂载 /system 的临时文件
- 安装 Xposed 但取消重启
- 从 /tmp/android-{username}/emulator-{random chars} 复制临时 system.img 到你的主目录
- 关闭模拟器
- 用您的主目录 覆盖现有system.img
- 再次启动模拟器
- Xposed 现在应该可以运行了
内核版本 3.10+(kernel-ranchu 或真正的沙盒模拟器)
不幸的是,目前还没有从 ranchu-emulator 中修改 system.img 的已知方法,ranchu 似乎会阻止每个写操作。 被阻止的操作让系统认为分区已损坏,因此系统以只读方式重新挂载分区作为安全后备。
找到了两个解决方法:
1.) 在启动模拟器时使用参数-engine classic(因此强制使用kernel-qemu)您可以使用上述步骤进行更改
2.) 使用内核映像较低版本 3.10 以避免模拟器乱码。您可以使用上述步骤,并在应用更改后再次使用之前的内核映像