正文
第二种方式的实现可以看看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及以上,则通过下面的这几个函数去释放
资源的热修复
而对于资源的热修复,其实主要还是和插件化的思路是一样的,具体实现可以参考两个
本篇文章就来说说资源的热修复的实现思路,在这之前,需要贴两个链接,以下文章的内容基于这两个链接去实现,所以务必先看看,不然会一脸懵逼。一个是instant run的源码,自备梯子,另一个是冯老师写的一个类,这个类在Atlas中出现过,后来被冯老师重写了,同样自备梯子。
重要的事情说三遍
自备梯子
自备梯子
自备梯子
-
instant-run源码
-
Hack.java实现
资源的热修复实现,主要由一下几个步骤组成: