揰掵佲 发表于 2017-3-19 13:51:26

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

一种在Android模拟器下安装Xposed的方法
一种在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

页: [1]
查看完整版本: 一种在Android模拟器下安装Xposed的方法