美文网首页
资源修复-深入热修复(2)

资源修复-深入热修复(2)

作者: 百花鱼藤 | 来源:发表于2019-01-27 11:13 被阅读0次

    一、通用的修复方式

          构造一个新的AssetManager,并通过反射调用addAssetPath,把这个完整新的资源包加入到AssetManager中,这样就得到了一个包含新资源的AssetManger。找到之前所有引用到原有AssetManger的地方,通过反射,替换掉原来的AssetManger。

     缺点:处理大量的兼容性问题。这种方式在Android L之后,会解析资源包,但是获取资源时还是引用旧的资源,然后在引用补丁包的资源,4.4以下,不会发生解析新的资源包,根本修复不了。

    二、AssetManager的替换

      在Android L 之后,直接在原来的AssetManager添加patch就可以了,这里的patch,packageId 不可以是0x7f 和0x01 。

    在Android 4.4 及以下:调用AssetManager的destory方法,destory方法是个native方法,调用native destory方法,解除java层AssetManager对native层AssetManger的使用,然后调用init方法进行重新构造AssetManager,制空mstringBlocks,重新添加原来AssetManager加载过的资源路径,添加patch的资源路径,重新对mStringBlocks赋值,mStringBlocks记录了之前加载过的所有资源包的String bool 。

    相关文章

      网友评论

          本文标题:资源修复-深入热修复(2)

          本文链接:https://www.haomeiwen.com/subject/nnzrjqtx.html