Xposed也要热更新
好久没写博客了。这次玩一点不一样的。
吐槽&起因
相信熟悉Xposed的小伙伴们都知道,每次写完Xposed都要重新启动啊。有木有!反射错了,写错了名字。改一个log,都要重新启动啊有木有!重新启动浪费时间啊有木有!一个字母导致一次重新启动!
要命啊有木有!
所以就花时间想了想有木有不重新启动就马上生效的办法呢。
Xposed每次都须要重新启动才干生效,这里我并不知道详细原因,可是大题能够推測为烧入系统的代码,所以假设代码有变动,必须经过重新启动。那么有没有仅仅烧一次。就能够动态变动的方法呢?
原理
參考android里classloader实现,发现findClass()最后都是调用了DexFile来loadClass,那我们也能够偷懒,不包裹classloader。直接拿DexFile来动态载入我们的代码呀。
栗子
首先,准备hook一下我的zoomheader,在主界面onCreate()的时候,让他弹出一个Toast. (事实上做什么都能够
,这里仅仅是方便演示)
此时,打开我的app,就能够弹出“哈哈”这个Toast
可是,这时候我发现“哈哈”事实上写错了,我想写成”呵呵”,这时候我不得不改动“哈哈”为“呵呵”。然后重新启动。为了这一个字等上个三五六分钟。
。
代码热载入。热更新
所以,这个时候,我们把须要写的逻辑代码单独放到一个dex里,然后使用DexFile载入,这时候尽管仅仅烧了一次代码,可是这个烧了以后的代码能够依据动态的dex的代码来进行逻辑变化。
原理非常easy。代码也非常easy,仅仅须要几句话。
这里为了展示原理,写了最简单的。这里去读取/sdcard/classes.dex文件。直接导入Hotfix类。调用他的invoke方法。因为弹出toast须要用到activity參数,所以把这个Activity传入就可以。
HotFix代码如图:把Toast逻辑写在了里面。
这个时候,仅仅要把hotfix的apk打包,然后提取dex。通过adb push到sdcard, 就能够实现热更新了!
自己主动化热更新
只是这样未免还是有些麻烦。所以当然要用gradle帮我们了。
观察application插件,有个叫做transformClassesWithDex的任务,他就是把class文件转化为dex的任务,这个时候。我们去hook这个任务。在他运行完成以后,自己主动把dex push到/sdcard/中。
写一个任务,叫做pushDex ,而且依赖于transformClassesWithDex。
此时。仅仅要改动完HotFix.java的代码,然后运行Task pushDex。代码就自己主动热更新完成!
推断adb路径代码 使用了AppMethodOrder的代码,感谢原作者 @三斤-虹猫
项目演示样例代码已经上传至https://github.com/githubwing/HotXposed
认为实用,能节省时间的话,欢迎star哈。
Xposed也要热更新的更多相关文章
- [置顶]
Xposed也要热更新
好久没写博客了.这次玩一点不一样的. 吐槽&起因 相信熟悉Xposed的小伙伴们都知道,每次写完Xposed都要重启啊!有木有!反射错了,写错了名字,改一个log,都要重启啊有木有!重启浪费时 ...
- APP热更新方案
为什么要做热更新 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就会忙得焦头烂额:重新打包App.测试.向各个应用市场和渠道换包.提示用户升级.用户下载.覆盖安装. 重 ...
- APP热更新方案(转)
本文转载自[http://creator.cnblogs.com/] 博客地址:Zealot Yin 为什么要做热更新 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就 ...
- 移动端APP热更新方案(iOS+Android)
出自:http://www.cnblogs.com/Creator/p/7007694.html 为什么要做热更新 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就会忙 ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- iOS热更新-8种实现方式
一.JSPatch 热更新时,从服务器拉去js脚本.理论上可以修改和新建所有的模块,但是不建议这样做. 建议 用来做紧急的小需求和 修复严重的线上bug. 二.lua脚本 比如: wax.热更新时,从 ...
- 【.net 深呼吸】程序集的热更新
当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把 ...
随机推荐
- 【Educational Codeforces Round 36 C】 Permute Digits
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] //从大到小枚举第i(1..len1)位 //剩余的数字从小到大排序. //看看组成的数字是不是小于等于b //如果是的话. //说 ...
- ZJU 2425 Inversion
Inversion Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on ZJU. Original ID: ...
- [Docker 官方文档] 理解 Docker
http://segmentfault.com/a/1190000002609286 什么是 Docker? Docker 是一个用于开发.交付和执行应用的开放平台,Docker 设计用来更快的交付你 ...
- TextView- 内容过长省略号设定
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_conte ...
- Day4晚笔记
数据结构 并查集:捆绑两个点的信息,判断对错 倍增:LCA, 字符串 hash,模拟, 最小表示法 给定一个环状字符串,切开,使得字符串的字典序最小 图和树 割点,割边,强联通分量 点双联通分量 (把 ...
- error: function declaration isn’t a prototype [-Werror=strict-prototypes]
"warning: function declaration isn't a prototype" was caused by the function like that: ...
- 【2017"百度之星"程序设计大赛 - 初赛(A)】数据分割
[链接]http://acm.hdu.edu.cn/showproblem.php?pid=6109 [题意] 在这里写题意 [题解] 要处理的关系越多,肯定就越容易错. ->单调性. 根据这个 ...
- js进阶 14-9 ajax事件有哪些
js进阶 14-9 ajax事件有哪些 一.总结 一句话总结:ajax开始时事件.发送时事件,请求完成时事件,请求成功时事件,请求结束时事件,请求错误时事件事件. 1.ajax事件的监听对象是谁? 都 ...
- 【ASP.NET开发】.NET三层架构简单解析
对于三层架构来说,主要是使用设计模式的思想,对于项目的各个模块实现"高内聚,低耦合"的思想.这里就不做详细的介绍了,如果大家有兴趣,可以阅读软件工程和设计模式相关文章. 对于三层架 ...
- 最小二乘法,python3实现
https://www.cnblogs.com/BlogOfMr-Leo/p/8627311.html [用的是库函数] https://blog.csdn. ...