专栏名称: 复利大王
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
51好读  ›  专栏  ›  复利大王

Android 热补丁技术——资源的热修复

复利大王  · 公众号  · android  · 2017-02-21 10:26

正文

请到「今天看啥」查看全文



第二种方式的实现可以看看BaseDexClassLoader的构造函数


BaseDexClassLoader(String dexPath, File optimizedDirectory, String libraryPath, ClassLoader parent)


只需要在修复dex的同时,如果有native library,则获取原来的路径与patch的路径进行连接,伪代码如下:




而这种方式需要强依赖dex的修复,如果没有dex,就无能为例了,实际情况基本上是两种方式交叉使用,在没有dex的情况下,使用另外一种方式。


而native library还有一个坑,就是从patch中释放so的过程,这个过程需要处理兼容性,在 Android 21以下,通过下面这个函数去释放




而在andrdod 21及以上,则通过下面的这几个函数去释放



资源的热修复


而对于资源的热修复,其实主要还是和插件化的思路是一样的,具体实现可以参考两个


  • Atlas或者携程的插件化框架

  • Instant run的资源处理方式,甚至可以做到运行期立即生效。


本篇文章就来说说资源的热修复的实现思路,在这之前,需要贴两个链接,以下文章的内容基于这两个链接去实现,所以务必先看看,不然会一脸懵逼。一个是instant run的源码,自备梯子,另一个是冯老师写的一个类,这个类在Atlas中出现过,后来被冯老师重写了,同样自备梯子。


重要的事情说三遍

自备梯子

自备梯子

自备梯子


  • instant-run源码

  • Hack.java实现


资源的热修复实现,主要由一下几个步骤组成:


  • 提前感知系统兼容性,不兼容则不进行后续操作

  • 服务器端生成patch的资源,客户端应用patch的资源

  • 替换系统AssetManger,加入patch的资源







请到「今天看啥」查看全文