博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
热修复-Tinker
阅读量:6318 次
发布时间:2019-06-22

本文共 1396 字,大约阅读时间需要 4 分钟。

 

微信开源,真是喜出望外,必须要去看看啊,比起nuwa来微信好很多,而且github上也有专门的官方文档说明,还有很多资料查询

参考地址:https://github.com/Tencent/tinker/wiki

     https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97

想着以前研究的时候还要分包块什么一些复杂想法,现在发展到这种程度,真是三天不打就上房揭瓦了,很好比喻互联网,学习不能断,可能在不知不觉的时候就已经发展几个阶段了

看对比图也知道了,微信的方式,和qq空间的方式的区别是不用插桩,无补丁的时候几乎没有性能损失,打补丁时需要删除核心加载类

文档还是挺详细的,照着文档来,基本跑通就没问题了

首先肯定是下载demo了,然后文档上介绍了几种方案,也是推荐gradle生成配置(见下图),demo里也是那样做的,那我们肯定也是走这个方案了

 

集成的时候demo里的gradle配置上用的 TINKER_ID 是获取的git的版本号,这个搞起来麻烦,文档上有结束,可以换成versionName等,我就换的versionName,这个 TINKER_ID 要注意保持一致,不然会失败

然后直接运行程序,或者build apk,成功后在你的项目路径app\build\bakApk里应该会有apk生成

然后可以修改你的bug了,可以在你的布局文件里修改显示的文本,修改好之后在As的terminal终端使用命令行 gradlew tinkerPatchDebug,可不能直接用你自己的apk改个名字就丢上去了,那样就over了

 

 

 

 然后看到successful,这个时候在你项目的目录里就会有生成apk了,app\build\outputs\tinkerPatch\debug\

这个就是你的补丁了,把这个apk放到手机根目录就行了

 

点开你的app,点击load patch,你会看到一个打印出 patch success, please restart process的toast,这个时候你可以锁屏,然后点亮屏幕,发现ok了,或者重启app,然后点击SHOW INFO可以查看到详细的信息显示补丁包已经加载成功了,github本身就很多介绍的资料,可以结合别人写的好的博客看看学习,让自己更快的掌握

 

/**

*个人理解

*微信针对QQ空间超级补丁技术的不足提出了一个提供DEX差量包,整体替换DEX的方案。主要的原理是与QQ空间超级补丁技术基本相同,整体替换掉旧的DEX,达到修复的目的

**/

SampleApplication是gradle自动生成的,继承自 TinkerApplication ,然后设置捕捉代码异常,onBaseContextAttached就是我们要找的关键代码了

 

 

这代码大致是反射调用TinkerLoader的tryLoad()方法拿到加载补丁结果,加载补丁包,反射调用同步周期,重置安全模式次数,大于等于三次会进入安全模式不再加载,一点点理解 深入研究很是复杂的,正如微信张绍文所说,这真是一条跪着走完的路,而且我们可以不用跪了,先乘个凉

 

转载于:https://www.cnblogs.com/LiuZhen/p/6245317.html

你可能感兴趣的文章
php simple_html_dom 一个iconv错误引起解析中断的问题,貌似内存溢出
查看>>
每日一记--Mysql错误代码1067
查看>>
nginx编译安装
查看>>
nginx安装waf防护
查看>>
[脚本]---删除某流氓花瓣壁纸程序脚本
查看>>
继承与派生
查看>>
阿里云申请ssl证书
查看>>
修改vs2005,vs2008,vs2010调试默认浏览器
查看>>
C语言基础
查看>>
es6中新增数组的方法
查看>>
软件工程实践第一次作业--准备篇
查看>>
vue 开发系列(三) vue 组件开发
查看>>
webService 远程访问不了的问题
查看>>
git 恢复被修改的文件
查看>>
基于 HTML5 WebGL 的 3D SCADA 主站系统
查看>>
深度学习(六)keras常用函数学习
查看>>
初始强连通分量
查看>>
执行shell脚本时提示bad interpreter:No such file or directory的解决办法
查看>>
文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...
查看>>
Java NIO学习笔记五 FileChannel(文件通道)
查看>>