Xposed 模块免重启开发(借助VirtualXposed)

Xposed 模块开发痛点

Xposed 模块修改之后是需要重启手机生效的,导致开发非常麻烦,改个代码运行还要重启,等待时间太长。

现有的方案

搜索了一下,有现成的方案,原理大多是修改 Xposed FrameWork 源码实现,还有一种思路是动态加载。但都有点麻烦,还存在一些问题,偶尔失效只能重启。
参考:
https://github.com/shuihuadx/XposedHook
https://www.jianshu.com/p/d5596196bd12
https://bbs.pediy.com/thread-223713.htm
http://androidwing.net/index.php/274

VirtualXposed 方案

VirtualXposed 主要功能是在非ROOT环境下运行Xposed模块。使用之后觉得它比较适合模块开发,原因几下几点:

  1. 支持免重启手机激活模块
  2. 对开发者友好,详见 wiki
  3. 项目开源,作者很活跃,遇到什么问题很快可以得到答复

但是还是有一些缺点的:

  1. 不支持 x86,也就是不支持模拟器,只能使用真机
  2. 暂不支持资源HOOK
  3. 部分插件的兼容性有问题
  4. 不能 hook 系统 API
  5. 使用必须将需要 hook 的 APP 和模块 APP 安装到VirtualXposed

如果以上缺点提到的有涉及的就不能使用该方案

Gradle Task 实现自动重启 VirtualXposed,自动更新模块

以下配置环境是 Android Studio
wiki 里提供重启 VirtualXposed 、自动更新 APP,打开某 APP 的广播方式。利用这些可以编写Gradle Task 实现运行项目自动更新模块 APP,自动重启VirtualXposed,自动打开需要 hook 的 APP。
需要先将需要 hook 的 APP 和模块先安装到 VirtualXposed,再进行以下设置:

  1. 将 Debug Configurations 里将 Gradle aware Make - 修改为 :app:installDebug


    image.png
  2. 修改 app/build.gradle 文件,在最下面增加如下代码
afterEvaluate {
    installDebug.doLast {
        updateVirtualXposedAPP.execute()
        rebootVirtualXposedAPP.execute()
        launchVirtualXposedAPP.execute()
    }
}
// 更新 VXP 中的 app
task updateVirtualXposedAPP(type: Exec) {
    def pkg = android.defaultConfig.applicationId
    commandLine android.adbExecutable, 'shell', 'am', 'broadcast', '-a', 'io.va.exposed.CMD', '-e', 'cmd', 'update', '-e', 'pkg', pkg
}
// 重启 VXP
task rebootVirtualXposedAPP(type: Exec) {
    commandLine android.adbExecutable, 'shell', 'am', 'broadcast', '-a', 'io.va.exposed.CMD', '-e', 'cmd', 'reboot'
}
// 重启 VXP 需要 hook 的 APP,需要知道它的包名
task launchVirtualXposedAPP(type: Exec) {
    def pkg = 'com.tencent.mm'// 需要 hook 的 app,这里是微信
    commandLine android.adbExecutable, 'shell', 'am', 'broadcast', '-a', 'io.va.exposed.CMD', '-e', 'cmd', 'launch', '-e', 'pkg', pkg
}

具体代码参见:MDWechat
原理就是利用 Gradle Task 使用 adb 发送广播。
以上配置好就可以愉快的敲代码了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,360评论 25 709
  • What xposed 模块调试需要重启手机一直是一个令人头疼的问题,浪费大量宝贵的开发时间。再遇上 androi...
    BWELCO阅读 6,777评论 1 2
  • 这周又有一批新家人加入了学习分享会,跟我们分享了自己在三天的学习六项精进过程中的心得体会。让我再一次感同身受,听到...
    牛妈牛妈阅读 416评论 0 0
  • 第一章 灵枫缓缓睁眼,周围的一切令她有些瞠目结舌。不再是那个黑暗的玫情宫,此处鱼龙混杂,不光是各处传来的吵闹声,还...
    墨千璃阅读 233评论 0 0
  • 早安,2017, 新年的第一天你和谁在一起? 愿你在新的一年里, 一切都美好! 今天我们继续聊聊保持正念之幸福的能...
    Miranda分享阅读 401评论 0 0