首页
社区
课程
招聘
[原创]一种在Android模拟器下安装Xposed的方法
发表于: 2015-12-14 20:52 30425

[原创]一种在Android模拟器下安装Xposed的方法

2015-12-14 20:52
30425

一种在Android模拟器下安装Xposed的方法

  本人菜鸟一个,研究androd没多久,最近想在模拟器(4.4版本,ARM)上面安装Xposed,本以为模拟器上面安装和真机一样,想不到遇到了一堆问题:
1、模拟器可以root(我用的是kingroot,显示root成功),但是xposed安装需要root权限的时候获取不到root。而且模拟器重启后kingroot就显示模拟器root失效。猜测可能是模拟器禁止任何程序修改system.img镜像文件。即使可以在/system目录下写文件,这些文件并没有保存在system.img中,模拟器重启之后就恢复到原来的状态。那么Xposed的app_process就无法替换/system/bin/app_process

2、于是我们就需要通过其他方式将app_process写进去。在ubuntu下执行“sudo mount -t ext4 -o loop system.img system/”,将system.img挂载到新建的system文件夹,然后将xposed安装包里面的app_process(通过解压apk获得)替换system/bin/app_process

3、本以为这次应该没有什么问题了,重启模拟器后发现Xposed还是显示没有安装成功。于是去看logcat,发现日志中有一句“ERROR: Could not access Xposed jar '/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar”。于是进入该目录下查看到底有没有这个文件,结果发现文件存在,而且所有用户都可读。思考了半天,猜测可能是app_process启动的时候,需要加载XposedBridge.jar ,但是模拟器还没有挂载userdata-qemu .img文件到/data目录(纯属瞎蒙,不知道对不对)

4、那么我们可以将这个文件放到userdata-qemu .img中试试。在ubuntu下执行“sudo mount -t ext4 -o loop userdata-qemu.img data/”(注意这个userdata-qemu.img是模拟器配置目录下的那个镜像,不是sdk里面那个userdata.img),将 XposedBridge.jar(通过解压apk获得)复制到system/framework/目录下面,注意给所有用户可读权限。同时用ida打开Xposed的app_process文件,将代码里面的路径字符串“/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar”修改为“/system/framework/XposedBridge.jar”(当然也可以通过修改源代码编译生成),将修改过的app_process用第二步的方法放入system.img中

5、 本以为这次应该没有什么问题了,重启模拟器后发现Xposed还是显示没有安装成功。于是去看logcat,发现日志中有一句“Could not move /data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar.newversion to  /system/framework/XposedBridge.jar”。原来app_process启动的时候会检查“/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar.newversion ”是否存在,如果存在就将该文件替换为到/system/framework/XposedBridge.jar(是我第四步修改的路径),是一种XposedBridge.jar更新机制。因为system.img文件无法被修改,那么这个步骤就会报错。XposedBridge.jar.newersion文件是XposedInstaller启动后自动生成的,所以要么改XposedInstaller,要么该app_process,我选择的是将app_process里面的“/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar.newversion”字符串修改为一个不存在的文件名(用16进制编辑器或者直接源代码编译生成)。

6、本以为这次应该没有什么问题了,重启模拟器后发现Xposed还是显示没有安装成功。 于是去看logcat,发现日志中有一句“java.io.FileNotFoundException: /data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar: open failed: ENOENT (No such file or directory)”,由于是java异常,所以猜测是XposedBridge会获取 XposedBridge.jar文件里面的某些信息,而它默认自己安装在/data/data/de.robv.android.xposed.installer/bin目录下,但是之前我已经将该文件复制到/system/framework下。所以要么修改XposedBrdige.jar源码然后编译,要么复制一份XposedBrdige.jar到/data/data/de.robv.android.xposed.installer/bin目录下,我选择来后者。

7、模拟器重启运行,成功。附件是修改后的app_process

app_process_modifid.zip


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (5)
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
应该有相关的基础才能发现这些问题
2015-12-14 21:14
0
雪    币: 185
活跃值: (486)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
现在也在碰到这个问题
2016-7-26 18:31
0
雪    币: 222
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
逍遥模拟器可以直接安装啊。
2016-7-28 12:27
0
雪    币: 1
活跃值: (98)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主,我发现我在Android 5.1模拟器中发现/system 无法挂载。 想请教下你有遇到类似的问题么?
2017-2-16 00:08
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哦,我直接装上了。
2017-2-19 00:51
0
游客
登录 | 注册 方可回帖
返回
//