Android 框架Android知识Android开发经验谈

Sophix及热修复原理介绍

2017-09-17  本文已影响177人  liaowenhao

Sophix相关书籍

深入探索Android热修复技术原理这本书主要讲解了Android的热修复中的热部署,冷部署以及资源和so库的修复技巧。全文主要讲Sophix应对以上四个方面的技术解析,不管是自家产品还是业界其他方案的横纵对比,Sophix技术目前都是最优的。

  1. 补丁小,合成不占太多空间和性能。
  2. 对代码的侵入小,对native代码的hook也精简,做到最大兼容。
  3. 支持的修复范围广。支持小范围的即时生效和大范围的冷启动。也支持so库和资源修复。

Hook技术

在事件分发流中,通过Hook钩子在事件传送到终点前截获并监控事件的传输,从而处理一些特定干预事件。

Sophix不同之处

Sophix同时使用了热启动的底层替换方案及冷启动的类加载方案,两个方案使用的补丁是相同的。优先热启动。

sophix与主流框架对比

代码修复方案

底层替换方案
类加载方案

dex的大小占整个apk比例较低,一个app里的dex文件大小不是主要部分,占空间大的主要是资源文件。

冷启动主流框架分析

DexFile.loadDex流程
DexFile.loadDex尝试把一个dex文件解析并加载到native内存,在加载到native内存之前,如果dex不存在对应的odex,那么Dalvik下会执行dexopt,Art下会执行dexoat,最后得到的都是一个优化后的odex。实际上最后虚拟机上执行的是这个odex而不是dex。


dexopt流程

资源修复方案

基本参考InstantRun的实现:构造一个包含所有新资源的新的AssetManager。并在所有之前引用到原来的AssetManager通过反射替换掉。
Sophix不修改AssetManager的引用,构造的补丁包中只包含有新增或有修改变动的资源,在原AssetManager中addAssetPath这个包就可以了。资源包不需要在运行时合成完整包。

so库修复方案

本质是对native方法的修复和替换。类似类修复反射注入方式,将补丁so库的路径插入到nativeLibraryDirectories数据最前面。

热修复主流框架对比可查阅
Android热修复主流框架调研

上一篇下一篇

猜你喜欢

热点阅读