android的热修复,Android热修复原理

热修复框架技术主要有三类,代码修复,资源修复,动态链接库修复。

资源修复

很多资源修复的框架参考了Instant Run资源修复的原理,所以先了解一下Instant Run

Instant Run

Instant Run是Android Studio 2.0以后新增的一个运行机制,能减少开发人员第二次及以后的构建和部署时间。

7235ae2d0175ae230bca96c4d052b7e8.png

hotfix-02.pngHot Swap: 这是效率最高的部署方式,修改一个现有方法中的代码会采用这种方法。它不需要重启APP, 不需要重启Activity

Warm Swap: App不需要重启,但是Activity需要重启。 修改或删除一个现有的资源文件时采用

Cold Swap: App需要重启,但不需要重新安装。 添加,删除或修改一个字段和方法,添加一个类时采用该方式。

Instant Run 资源修复的原理创建新的AssetManager,通过反射调用addAssetPath方法加载外部的资源,这样新创建的AssetManager就含有了外部资源

将AssetManager类型的mAssets字段的引用全部替换为新的AssetManager.

代码修复

类加载方案

类加载方案基于dex分包。 为什么要dex分包,因为65535的限制和LinearAlloc限制。65535限制。主要原因是DVM ByteCode的限制,dvm指令集方法调用指令invoke-kind索引为16bits,最多能引用65535个方法数

LinearAlloc限制Dvm中的LinearAlloc是一个固定的缓冲区,当方法数超出了缓存区大小就会报错。

常用的做法:我们会新建一个hotfix分支,然后在该分支上修改bug,生成patch包,然后将patch放到Element数组dexElements的第一个元素,这样就会优先加载patch中的类,后面存在bug的类就不会被加载。 因为classloader采用的双亲委托模式,同一个类加载之后就不会再次加载

类加载方案需要重启app,让classloader重新加载补丁包中的类。为什么要重启? 因为类是无法卸载的,想要重新加载新的类,就需要重启app. 所以采用类加载方案是不能及时生效的。Q Q空间超级补丁,Nuwa,就是按照上面将补丁包放到Element数组的首位优先加载

微信的Tinker将新旧APK做了diff,得到patch.dex,再将patch.dex与手机APK中的classes.dex做合并,生成新的classes.dex.然后在运行时通过反射将classes.dex放到Element数组的第一位。

底层替换方案

底层替换方案不会再次加载新类,而是直接在Native层修改原有类。底层替换方案主要是替换ArtMethod结构体中的字段或者替换整个ArtMethod结构体。

AndFix采用的是替换ArtMethod结构体中的字段,但是会有兼容性问题,因为厂商会修改结构体,导致替换失败

Sophix采用的是替换整个ArtMethod结构体,不会存在兼容问题。

底层替换方案是可以及时生效的,不需要重启。

Instant Run方案主要是通过ASM来操作代码,进行方法的修改。

ASM是一个字节码操作框架,能够动态生成类或者增强现有类的功能。ASM可以直接产生class文件,也可以在类被加载到虚拟机之前动态改变类的行为。

动态链接库修复

这个主要是更新so,也就是重新加载so. 加载so有两个方法System的load方法. 该方法传入的参数是so在磁盘空间的完整路径

System的loadLibrary方法。 该方法传入的参数是so的名称,用于加载apk安装后自动从APK包中复制到/data/data/packagename/lib下的so. 目前so的修复主要是针对这两个方法。

so修复的两个方案将so补丁插入到NativeLibraryElement数组的前部,让so补丁优先加载

调用System的load方法来接管so的加载入口。

参考:

《Android进阶解密》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派的四种登陆方式

参考:树莓派的4种登陆方式 作者:丶PURSUING 发布时间:2021-02-02 09:15:30 网址:https://blog.csdn.net/weixin_44742824/article/details/113524929?spm1001.2014.3001.5502 目录一、HDMI视频线二、串口1.修改sd卡中的系统文件2…

丰收互联蓝牙key怎么开机_ublox收购Rigado的蓝牙模块业务,扩大蓝牙低功耗产品组合...

全球领先的定位与无线通讯技术供应商u-blox 宣布,已与 Rigado签署资产购买协议,收购其蓝牙模块业务。Rigado是商业物联网Edge-as-a-Service(EaaS)边缘即服务网关解决方案的领先供应商,于2015年开始提供通过认证的无线模块。强化蓝牙产品系列此…

好的编程风格

1。关键字 if, while, for 后有一个空格 2。号之类的双目运算符两侧都有空格 3。后缀运算符和操作数之间不加空格 例如 s.a , foo(argu) , a[i] 4。, 号和 ; 号之后要加空格&#xff0c;例如 foo(argu1, argu2) for (i0; i<20; i) 5。关于双目运算符两侧加空格可以灵活规定&…

android 时间戳 时区,三句话理解时区与时间戳

从不浪费时间的人&#xff0c;没有工夫抱怨时间不够。 —— 杰弗逊第一句话&#xff1a;时间戳时间不分东西南北、在地球的每一个角落都是相同的。他们都有一个相同的名字&#xff0c;叫时间戳。时间戳 指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、PO…

windows下的diskpart指令彻底格式化清除U盘

参考&#xff1a;windows下的diskpart指令修复U盘分区 作者&#xff1a;丶PURSUING 发布时间&#xff1a;2021-02-02 09:38:55 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/113537038?spm1001.2014.3001.5501 参考&#xff1a;原文链接 作者&…

简述控制反转ioc_讲一下你理解的 DI 、IoC、DIP ?

作者 | 木小楠链接 |cnblogs.com/liuhaorain/p/3747470.html摘要面向对象设计(OOD)有助于我们开发出高性能、易扩展以及易复用的程序。其中&#xff0c;OOD有一个重要的思想那就是依赖倒置原则(DIP)&#xff0c;并由此引申出IoC、DI以及Ioc容器等概念。本文我们将一起学习这些概…

html模糊遮罩层磨砂玻璃,常见的PPT背景:如何设计PPT背景?

第一种&#xff1a;纯色背景纯色背景分为两类&#xff0c;一种为黑白灰等“无色”背景&#xff0c;另一种就是彩色背景。黑白灰等无色背景&#xff0c;是安全的背景&#xff0c;容易配色&#xff0c;所以在使用上最多&#xff0c;如果没有色彩基础的朋友&#xff0c;建议还是用…

linux分文件编程、静态库与动态库

参考&#xff1a;linux静态库与动态库编程 作者&#xff1a;丶PURSUING 发布时间&#xff1a;2021-02-02 16:51:49 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/113539449?spm1001.2014.3001.5501 目录一、分文件编程的引入优点实现二、库的概念什…

十万个为什么儿童版_《虹猫蓝兔十万个为什么》上架爱奇艺奇巴布绘本馆

虹猫蓝兔绘本《虹猫蓝兔十万个为什么》上架爱奇艺奇巴布绘本馆全套专区。《虹猫蓝兔海底历险记》在爱奇艺PC端首页推广。红网时刻6月11日讯(记者 胡邦建 )今日&#xff0c;记者从湖南漫联卡通文化传媒有限公司获悉&#xff0c;该公司旗下的虹猫蓝兔绘本《虹猫蓝兔十万个为什么》…

创文html5作品,【《创文故事》纪录短片入围作品展播之七】引路人

剧情简介&#xff1a;他只是一名普普通通的教师&#xff0c;却每天风雨无阻地为学生引导起上学放学的路。而这一切&#xff0c;没有一分钱&#xff0c;也没有一分利。他以身作则&#xff0c;用自己的行动感染了周围的人&#xff1a;从一开始的几个人&#xff0c;发展到现在几百…

树莓派外设开发基础(wiringPi库)

参考&#xff1a;树莓派外设开发基础篇 作者&#xff1a;丶PURSUING 发布时间&#xff1a;2021-02-05 18:20:53 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/113673019?spm1001.2014.3001.5501 目录外设开发综述及wiringPi库是什么如何获取如何使…

html仿百度页面代码_百度优化需要注意的4点

百度优化的技术很多&#xff0c;需要根据行业特点进行开拓和挖掘。还需要有多年的网络营销服务经验&#xff0c;进行网站分析、关键词分析、同行竞争分析&#xff0c;优化开始后监视网站流量数据。所以百度优化需要注意的4点如下&#xff1a;(1)页面优化。页面质量不高&#xf…

树莓派串口通信

目录相关概念简述半双工与全双工串口通信注重什么串口通信编程常用API初次使用需要配置树莓派和电脑串口之间读、写、交互接线编写程序其他简单了解为什么说linux一切皆文件查找文件是否存在相关概念 简述半双工与全双工 全双工允许通信双方同时互传数据&#xff1b;半双工不…

html把实线变成虚线,Html5 Canvas 绘制虚线和实线的切换方法

场景应用&#xff1a;1需朋者说上事是础一发一开程和开数的目前间)、最开始默认绘制的都新直能分支调二浏页器朋代说&#xff0c;事刚是实线。var canvas document.getElementById("canvas");var context canvas.getContext("2d");context.strokeStyle …

React引入,运行

1.引入 <script src"https://cdn.bootcss.com/react/15.5.4/react.min.js"></script> <script src"https://cdn.bootcss.com/react/15.5.4/react-dom.min.js"></script> <script src"https://cdn.bootcss.com/babel-stand…

linux与windows间共享文件夹 FileZilla树莓派文件传输

参考&#xff1a;linux与windows间的文件共享 作者&#xff1a;丶PURSUING 发布时间&#xff1a;2021-02-09 11:37:48 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/113767236?spm1001.2014.3001.5502 参考&#xff1a;利用FileZilla实现ubuntu与w…

MATLAB 快速绘制曲线图的形状,粗细,颜色

MATLAB 快速绘制曲线图的形状&#xff0c;粗细&#xff0c;颜色 在写论文的时候&#xff0c;经常要用到Matlab绘制一些曲线&#xff0c;包括曲线的形状、粗细、颜色等&#xff0c;可以通过以下的piot函数实现。 1.通过改变R-G-B 的值改变线条的颜色&#xff1a; 通过改变R-G…

安装secureCRT提示sorry的解决办法

摘自&#xff1a;你的secureCRT还在sorry吗&#xff1f; 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-12 08:21:37 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114684721?spm1001.2014.3001.5502 此篇专门针对于学习群中部分小伙伴…

第三十三讲:tapestry表单组件详解之Label

2019独角兽企业重金招聘Python工程师标准>>> http://flywind.org/newtechnologydetail/168 转载于:https://my.oschina.net/flywind/blog/82633

c语言基础回顾 —— 其他知识点

参考&#xff1a;c语言基础回顾 —— 其他知识点 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-11 14:48:59 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/114666007 本文为学习笔记&#xff0c;结合课程内容以及下列文章 在 printf 里…