apk热补丁动态修复的制作、调用、实现1

apk+热补丁

参考文献:

系统环境

硬件环境:macOS
IDE   :Android studio

前言

什么是热补丁?
当一个APP发布以后,如果某个类或者模块出现bug需要修复,这时需要重新编译、打包、测试APP,之后再发到各个渠道,提示用户升级,覆盖安装更新版本,而改动却仅仅是一行代码。
这时如果服务器提供一份修复的代码,app在下载到这份代码之后,直接替换掉原来的代码该是件多么温馨的事啊。
热补丁就是完成这样的事。

热补丁原理

该原理简单的来说就是类替换:将有问题的类替换成我们修复的类。
正常的app解压之后只有一个classes.dex文件,该文件是Android Dalvik虚拟机可以执行的文件。如图:
这里写图片描述
如果你知道Android multidex(也叫Android分包)的话,就会知道一个app里是可以有多个dex文件的这里写图片描述
我们的修复类就在classes2.dex(后面我们会对该文件进行重新打包为途中的path_dex.jar文件,这个操作后续会说)。

我们知道,multidex方案的实现,其实就是把多个dex放进app的classloader之中,从而使得所有dex的类都能被找到。在虚拟机findClass的过程中,如果在两个dex文件中出现了重复的类,参照下面的类加载的实现,是会使用第一个找到的类的。

public Class findClass(String name, List<Throwable> suppressed) {  

    for (Element element : dexElements) {  //每个Element就是一个dex文件
        DexFile dex = element.dexFile;
        if (dex != null) {
            Class clazz = dex.loadClassBinaryName(name, definingContext, suppressed);
            if (clazz != null) {
              return clazz;
            }
        }
    }
    if (dexElementsSuppressedExceptions != null) {  
        suppressed.addAll(Arrays.asList(dexElementsSuppressedExceptions));
    }
    return null;
}

该热补丁方案就是从这一点出发,只要把有问题的类修复后,放到一个单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值