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目录下,我选择来后者。