xposed 插件开发

换了新手机,装上了Xposed加上各种插件,简直完美。以前一直想了解Xposed是如何工作的,正好有个插件有点 Bug,于是了解一下。

首先看文档,安装好Android Studio,下载开发包,导入项目,修改好gradle里的配置,这些网上都有直接的教程,没有很大问题。然后在AndroidMenafest.xml文件里声明为Xposed模块,创建Hook类,并创建xposed_init文件,声明好入口。

1
2
3
4
5
6
7
@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (!PackageList.contains(lpparam.packageName)) {
return;
}
XposedBridge.log(String.format("Hello xposed!"));
}

安装运行代码以后,可以在Xposed里找到刚刚安装的 APP,勾上并开启,重启手机便能看到在Xposed日志里打印的Hello xposed!了。

开发Xposed比较麻烦的地方在于每次改代码以后安装都需要重启,而且调试其他APP只能通过日志查看,于是我找到了可以使用Android Studio断点调试功能的方法。首先需要建一个自己的APP,调用会触发Xposed的代码,在Android Studio里面运行附加调试,调试的内容是调试Xposed插件的代码而不是那个APP,这样在APP中触发了Xposed应用代码以后,断点即可进入了。

剩下的内容便很简单了,找到原来那个插件的代码,发现它的调用方式有问题,去查看Android源码,找到正确的调用方式,使用反射拿到对象并调用,于是便解决了问题。唯一的麻烦就是查Android源码需要将各个版本的都下载下来并查看,而国内的网速…

有了这个插件以后,之前的那个有问题的插件也不用安装了,直接卸载,用这个替代,为了解决之前插件的一些缺陷,还准备做个可视化界面,目前只是把数据写入数据库,可以使用sqlite editor查看。

还有个情况是,好像在初始化的时候不能读取数据库和文件,于是做不到动态判断哪些包是需要拦截哪些不需要。可能底层 C 语言可以做到,但是太麻烦了,以后如果还涉及到这种插件可以研究下动态加载拦截包如何实现。

这个插件如果有需要也可以自由下载代码编译,个人比较懒,也不想发布到Xposed市场里。

作者

Mosby

发布于

2018-03-12

许可协议

评论