Tinker热修复方案(适合新手入门,因为我也初次搞这东西)

首先双手奉上官方文档   官方文档直通车

首先我们要知道为什么使用热修复?

热修复就是让用户不知道的情况下对App进行打补丁修复,比如用户反馈发现重大bug然后就会找到程序员进行及时修改,对App进行修复然后再从新打包上线,这样比较耗费人力,所以就出现了热修复,通过事先定设定的借口从网上下载无bug的代码来替换有bug的代码,这样比较省事用户体验也好,尤其是对于用户量多的App,个bug不只是影响到几个几十个用户,一些创业公司的APP,崩溃或者bug可能直接导致用户卸载和永不使用所以我们的app也要适当考虑加入热修复

原理:

Tinker呢是基于类加载来实现的,对于底层我也不太懂,简单介绍一下

前提是不必须保证Apk的主包没有问题,可以跑得起来

首先有一个系统原有的Apk,然后我们自身也有一个类加载器加载和系统一样的apk进行对比,然后通过事先定义好的接口去下载没有问题的文件包,加载到自身进行合并,并且提升自己的优先级,让这个Dex文件排在dexElements数组前面 然后通过反射插入到系统的dexElements数组中,而ClassLoader加载到正确的类之后就不会去加载有bug的类了,然后让类加载器重新加载。

Android的类加载器分为两种 PathClassLoader和DexClassLoader 都继承BaseDexClassLoader

PathClassLoader用来加载系统类和应用类

DexClassLoader用来加载jar  ,apk, dex文件,加载jar,apk也是最终抽取里面的Dex文件进行加载

 

方案:

 基于ClassLoader的双亲委托模型,给原ClassLoader设置parent ClassLoader,这样查找类时,会优先会使用parent ClassLoader去加载补丁类,其余类交给原ClassLoader.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值