但实际情况是,很多开发者只使用了Xposed的一部分功能,也就是de.robv.android.xposed.IXposedHookLoadPackage提供的功能。一般情况下,只是实现了该接口,然后在目标应用程序进程中注入执行插件代码,干一些自定义的勾当。
本文提供的免重启方案,仅仅针对de.robv.android.xposed.IXposedHookLoadPackage接口而已。如果你在开发中涉及到了更多的接口,比如de.robv.android.xposed.IXposedHookZygoteInit,那还能指望(软)不重启吗?
本文提供的免重启方案,主要对XposedBridge(源码地址:https://github.com/rovo89/XposedBridge)中的de.robv.android.xposed.XposedInit类进行了源码修改,然后重新进行编译。文件已经上传github,下载地址:https://github.com/fooree/fooXposed/blob/master/files/XposedBridge_fooree_compile.jar。
因为Xposed本身设计及其提供的功能比较完善(虽说不能满足部分人需求),此次更改其实是一种破坏Xposed架构和功能的行为;思来想去,满满的全是罪恶感。
为了能够免重启,最终还是下手了。
使用方法:替换手机中的/system/framework/XposedBridge.jar文件,然后重启手机(
)。务必首先备份原文件哦。
测试说明:在搭载Android 7.0系统的Nexus 5X手机上了测试,其他高度定制化的Android系统没有测试过。
使用限制:
只能在ART模式下(Android 4.4.4以上)有效。
只能对仅仅实现了de.robv.android.xposed.IXposedHookLoadPackage接口的插件生效。
对于不能退出的进程无效,例如system_server。
安装、更新插件后,需要等到XposedInstaller弹出模块更新通知,然后重启目标应用才能生效,而不是重启手机哦。
安装插件后在XposedInstaller中勾选才能生效,但仅仅是勾选而已;取消勾选失效。
小伙伴在测试、使用过程中遇到其他问题其他问题,请留言讨论。
小伙伴们,开始享受大把大把的免重启时光吧。