Xposed模块开发,免重启技巧
工欲善其事,必先利其器.我们在开发Xposed模块的时候,每一次修改Hook方法,都需要重启一次设备,很是麻烦,还浪费了很多宝贵的时间,有没有不重启的办法呢?当然有的,不然我在这里bb什么?
原理图
具体实现
Android设备安装一个app后,系统会在/data/app/目录下保存一份原始的apk安装包,当我们覆盖安装这个app时,系统同样会删除旧的apk文件,而保留新的apk文件。同样的,我们的Xposed模块(即使没有界面)安装后,也会在/data/app/目录下保存或者更新这个apk。这里就是利用系统备份的这个apk做了些文章
寻找apk文件
不过在Android api_21之前和Android api_21及之后,系统在/data/app/目录下保存原始apk文件方式是不一样的。
假设当前程序的包名为com.dx.test
,则在api_21之前,保存方式为/data/app/com.dx.test-1.apk
或者/data/app/com.dx.test-2.apk
,而在api_21及之后保存方式为/data/app/com.dx.test-1/base.apk
或者/data/app/com.dx.test-2/base.apk
.那么xxx.xxx.xxx-1
和xxx.xxx.xxx-2
有什么区别呢?如果该app属于新安装则保存为xxx.xxx.xxx-1
,如果为覆盖安装则保存为xxx.xxx.xxx-2
。这样的话要找到这个文件不是很简单么?下面马上给出代码。
//通过包名寻找apk文件
private File findApkFile(String pkg){