zoukankan      html  css  js  c++  java
  • 《android基于andFix的热修复方案》思路篇

    1:需求背景

    项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验

    2:方案要求

    静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk

    3:解决思路

    3.1:使用andfix,打出差异包,使用补丁的方式安装
    3.2:缺陷:只能支持源码级别函数的修改(全局变量、新增、删除方法都是无效的)

    4:修复BUG、创建差异包步骤

    基于andfix原理,每次版本更新后,之前版本打的热修复补丁都会失效,这也符合我们上图的修复步骤。

    因为每次热修复的修改,都会被合并到下个版本中了

    5:APK热修复打补丁流程

    补充描述:

    1:服务端补丁包字段如下:

    • patchId: 补丁包的唯一标识md5值,用于客户端校验补丁包合法性,以及本地记录该补丁包是否已经打过
    • url:下载地址

    2:客户端打包记录表:

    使用sqlLite记录每次打包的结果,用于避免重复打包,字段如下:

    • patchId:同上文
    • isSuccess: 打包是否成功

    3:apk版本号

    我们目前使用VersionCode作为版本号

    6:常见问题

    1:后台静默下载热修复补丁,会不会耗费流量?

    一般而言,每次热修复补丁的体积仅为4KB左右,仅涵盖两个版本差异部分

    2:andfix兼容性怎么样?

    目前试验了oppo、小米、魅族、moto、nexus,涵盖android 4.0~6.0;

    仅在oppo上发现了打补丁包会出现闪退的情况,但是再次进入,发现补丁包已经生效了

    把打补丁这个过程放到子线程之后,oppo崩溃的情况没再出现

    3:android 6.0权限问题会影响到热修复吗?

    会。因为下载补丁需要涉及到读取和写入外置存储设备权限,当然了,你也可以把补丁包放置在内部存储设备上避免这个问题

     4:下载的补丁包删除了,会使得补丁失效吗?

    不会,只要打成功了,就永久可用了。只有apk版本升级之后,才会使之前打上的补丁包失效

    5: 用不同的秘钥打出来的热修复包可以使用吗?

    不可以,andFix源码里面有对修复包携带的秘钥信息进行判断,安全性很高。

  • 相关阅读:
    CCCC练习即感
    1003 我能通过
    录制开讲啦杂感
    OOP第三次上机
    关于C++随机函数
    蓝桥杯杂感。
    CF502C The Phone Number
    It's a secret
    2017-06-22
    2017-05-12
  • 原文地址:https://www.cnblogs.com/kimmy/p/5409943.html
Copyright © 2011-2022 走看看