2019-04-07 热更新

热更新简述

热更新 主要是差量更新,避免在apk功能升级之后 需要重新下载整个的apk,避免用户流量损耗。而热更新 主要分为两派 微信thinker系列阿里andFix系列



微信的thinker

微信Tinker为了解决QQ空间补丁技术由于插桩带来的效率问题,引入DEX差量包。其主要的原理与QQ空间超级补丁技术基本相同,最大区别在于:不再将Patch.dex增加到Elements数组中,而是差量的方式给出Patch.Dex;然后将Patch.Dex与应用的Classes.Dex合并,然后整体替换掉旧的DEX,达到修复的目的。

该方案中通过自研DexDiff算法,深度利用Dex格式来减少差异的大小,从而做到补丁包足够小。其缺点在于:不支持实时生效;由于补丁DEX需要和原DEX合并,需要占用额外内存和磁盘空间,并且很容易因为内存消耗等原因合并失败与QQ空间补丁技术相同,同样需要侵入式打包



阿里的AndFix

阿里andfix 热修复方案通过Hook本地方法. 并没有整体替换class,整体流程如下:第一步,打开链接库得到操作句柄, 获取native层内部函数, 得到classobject对象;第二步,修复访问权限属性为Public ;第三步,得到新旧方法的指针,新方法指向目标方法,实现方法的替换

整个过程中不侵入打包性能无损耗;同时可以即时生效。其缺点同样明显:兼容性方面很不稳定,需要针对Dalvik虚拟机Art虚拟机适配不支持 \color{#ff0000}{新增} 类方法/字段,以及修改 \color{#ff0000}{<init>}方法,也不支持\color{#ff0000}{资源的替换};运行时方法被Patch,有Crash风险



阿里Hotfix 1.x版本

阿里Hotfix 1.x在AndFix的基础上,增加了补丁管理后台;同时基于手淘的实践,针对AndFix做了大量优化性能提高兼容稳定性;功能上支持 新增类并提供了更小补丁包(这是因为基于类方法作为粒度)

 1.缺点:
        1.1不支持资源、So文件修复;不支持新增类方法/类字段,这是因为Hotfix 1.x本质上是Hook一个已存在的的方法;

        1.2 参数包括Long、Double、Float基本类型的方法不能被Patch,同时参数超过8的方法不能被Patch;

        1.3被反射调用的方法不能被Patch,具体来说是非静态方法的反射调用会提示IllegalArgumentException 异常,当静态方法被反射调用,
           如果反射调用不涉及类对象,则可以被Patch;

        1.4构造方法不能被Patch,实际上不允许修改一个类字段(包括静态的和非静态的) 
       
        1.5正在运行的方法不能被Patch,也就是说如果一个方法正在运行,然后方法的在Native层的结构被替换, 那么就很可能导致Crash。



综上所述

阿里Hotfix和主流的热修复方案的效果对比。可以看出,在即时生效、性能消耗、Rom体积、接入复杂度、补丁包大小、类替换、SO文件替换、资源方案等方面,百川Hotfix都具有相对的优势。



自己实践bsdiff

bsdiff 并 不是专门apk增量更新设计的,它可以对任何二进制文件进行差分合并 。bzip2的功能是利用哈夫曼编码 对文件进行无损压缩 (将差分包 进行压缩便于网络传输 )和解压。所以完整的流程是这样的:

 1:bsdiff生成 patch->  bzip2压缩->  android下载patch->   bzip2解压patch->  bspatch合并patch->    新的apk

主要能够实现:
1:修复方法级别的bug
2:新增类文件,资源布局等
3:保证基础更新的apk 与差量生成patch文件的 基础apk一一致,否则会报 解析包异常 的问题

具体的实例

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 为什么有的人看起来每天很忙而碌碌无为?为什么有的人看起来一天没有什么规划却干了很多事情?这两天我自己没什么零花钱了...
    牟欣Demi阅读 319评论 0 0
  • 那邻人听了倒并没有坚决地表示什么,可是他的母亲的脸立刻就红了,伸出手去就打了那孩子。 那孩子很固执,仍是说: “是...
    011ddc66a39b阅读 266评论 0 0
  • 观音像有朋友知道是什么东西吗
    Mymymy_0de0阅读 204评论 0 0
  • 我所不能了解的, 花儿为什么不能哼起古老的情歌。 我所不能了解的, 弯弯的小河怎么不在天空流淌。 我所不能了解的,...
    心的字阅读 197评论 3 0
  • 第一次在这里写东西,很陌生,想起多年前我也是喜欢记日记的人,又有了信心,从现在开始吧,哪怕流水账的日记也好...
    静待花开ccll阅读 168评论 0 0