一种小而美的热修复方案中间件——AndFix

在我们走安全模式或者崩溃恢复的过程中、或者从请求OkHttp的Interceptor过滤中捎带探针得到要打补丁的时候,AndFix就派上用场了。

之所以是小而美,是因为该方案只能针对异常发生在java文件中,不针对Android资源,so库等进行修复。考虑到实际工程的需要,实际上这种修复方式已经满足工程的需要。如下图,左边为打补丁包的过程,ApkPatch工具会对老apk和新apk进行diff比对,得到类名相同,但内容不同的一些info信息,然后把这些info信息写进.smaol文件中,生成dex文件,每个release dex都需要进行keystore签名,最后进行md5校验生成md5文件。右边是具体工程运行的加载补丁包的过程。主要的地方就在于补丁包加载过程中,怎么做到相同类名的属性或者方法替换。核心的地方就在于自定义了classloader,因为类名相同的情况下,如果不定义classloader,那么默认还是加载了之前使用的classloader进行类的加载,此时还是会加载老的dex的class。然后查找出修改的方法或者属性,修改ART(dalvik)的字节码指针指向。

你可能感兴趣的:(一种小而美的热修复方案中间件——AndFix)