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源码里面有对修复包携带的秘钥信息进行判断,安全性很高。

《android基于andFix的热修复方案》思路篇的更多相关文章

  1. 《android基于andFix的热修复方案》实战篇

    有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies { compile 'com.alipay.eul ...

  2. 基于AndFix的热修复 成功后简单的总结总结错失

    首先了解热修复是什么东西?? 就我自己简单的理解:就是不须要又一次打包 公布到市场 然后再让用户又一次下载就能够把一些小bug和需求通过补丁的形式进行改动. 然后如今的热修复方式有大致的三种: 1.d ...

  3. Android 热修复方案Tinker(一) Application改造

    基于Tinker V1.7.5 Android 热修复方案Tinker(一) Application改造    Android 热修复方案Tinker(二) 补丁加载流程    Android 热修复 ...

  4. Android 热修复方案Tinker

    转自:http://blog.csdn.net/l2show/article/details/53925543 Android 热修复方案Tinker(一) Application改造 Android ...

  5. Android 插件化和热修复知识梳理

    概述 在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的 ...

  6. Android 类加载原理 和热修复——深入浅出原理与实现

    一.简述 热修复无疑是这2年较火的新技术,是作为安卓工程师必学的技能之一.在热修复出现之前,一个已经上线的app中如果出现了bug,即使是一个非常小的bug,不及时更新的话有可能存在风险,若要及时更新 ...

  7. Android插件化与热修复(六)-微信Tinker原理分析

    Tinker热修复原理分析 热补丁技术是在用户不需要重新安装应用的情况下实现应用更新,可快速解决一些线上问题.热补丁省去了Android应用发布版本的成本,而且用户端的更新也是无感知的. Tinker ...

  8. Android热修复方案比较

    热修复的特点:无需重新发版,实时高效热修复:用户无感知修复,无需下载新的应用,代价小: 修复成功率高,把损失降到最低. 一.热修复开源方案和使用情况 方案名称 方案开发公司 开发时间 Github星评 ...

  9. AndFix Bug 热修复框架原理及源码解析

    作为阿里巴巴开源的 Android 应用热修复工具——AndFix,帮助 Anroid 开发者修复应用的线上问题.Andfix 是 “Android hot-fix” 的缩写. 1.什么是AndFix ...

随机推荐

  1. c#注册表对象映射

    用于快捷保存与读取注册表,为对应的对象 示例 [RegistryRoot(Name = "superAcxxxxx")] public class Abc : IRegistry ...

  2. oracle向in语句传入参数查不出数据

    在oracle字符串中使用了in,但是查不出数据 string getModel = "select * from TB_YBSH where ID in :ids"; Oracl ...

  3. Linux 常用命令行

    Linux常用命令行 第一部分: cd命令 第二部分:文件操作 第三部分:压缩包操作

  4. python lambda表达式简单用法

    习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 1 2 3 4 5 6 7 8 # 普通条件语句 if 1 == 1:     name = 'wupeiqi' else ...

  5. UVA 11355 Cool Points(几何)

    Cool Points We have a circle of radius R and several line segments situated within the circumference ...

  6. hdu 2199 Can you solve this equation?(二分搜索)

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  7. 20 Web 编程 - 《Python 核心编程》

  8. Oracle中关于bitmap index的使用问题

    您如果熟悉 Oracle 数据库,我想您对 Thomas Kyte 的大名一定不会陌生. Tomas 主持的 asktom.oracle.com 网站享誉 Oracle 界数十年,绝非幸致.最近在图书 ...

  9. 【软件使用】Windows下的Objective-C集成开发环境搭建(IDE)

    Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用X ...

  10. 图的遍历之深度优先搜索(DFS)

    深度优先搜索(depth-first search)是对先序遍历(preorder traversal)的推广.”深度优先搜索“,顾名思义就是尽可能深的搜索一个图.想象你是身处一个迷宫的入口,迷宫中的 ...