Android Gradle项目Hotfix热修复技术的接入
https://github.com/AItsuki/HotFix
Issues
- MAC系统无法自动打包补丁,原因可能是路径分隔符问题
- 使用谷歌multidex分包后无法注入代码(开启multidex之后,jar包保存路径改变了)
- 暂不支持productFlavors
以上问题有空再改,最近正在忙其他事情,公司项目也准备重构。 而且此项目主要是科普和学习热补丁技术,有兴趣的可以自行解决上述问题。
一、HotFix简介
一个基于dex分包的热补丁框架,目前只支持gradle 1.5以上版本 具有以下特性:
- 支持混淆
- 自动生成补丁包
- 加载补丁包时进行签名校验
项目演示

二、使用方式
首先在build.gradle中有两个dsl需要进行配置。

2.1
fixMode
- fixMode是在debug模式下运行项目的配置,可以控制是否使用javassist注入代码,是否自动生成补丁,日常开发的话两个设置成false即可
- 因为注入代码后,自定义控件在preview预览的时候会报空指针(找不到Antilazy.class),所以需要将debugOn关掉才能方便预览。
2.2
fixSignConfig
这个是配置补丁包的签名文件,需要和Release签名打包时使用的一致,否则加载补丁的时候会校验失败,这也是为了安全性考虑,防止恶意注入代码。
storeFile,storePassword,keyAlias,keyPassword对应如下

build.gradle配置完毕后,只需要运行一次Release签名打包,然后修改代码,再次运行debug打包即可自动生成补丁了。
三、说明
- 在Release签名打包的时候会重新生成hash.txt,如果开启混淆的话还会生成mapping.txt,自动生成的补丁包是基于这个版本校验而来的。
- 在debug模式下直接运行或者打包会校验hash.txt和mapping.txt,自动生成补丁包并且为补丁包签名。
- 将生成的补丁包复制到sdcard根目录,重启应用即可实现热修复。
需要注意的是,如果在Release打包中开启了混淆,那么自动生成补丁的时候也需要将debug开启混淆,否则会将整个项目的所有类都打包成补丁包。
debug开启混淆方式如下

3.1
关于签名校验
只有使用Release产出的apk,加载补丁的时候才会进行签名校验。
如果你手机上安装的是debug包,那么不会进行签名校验。
3.2
关于android6.0以上
补丁包不能从sdcard中加载,因为android6.0后有运行时权限处理。从sdcard中加载只是为了方便测试和演示,一般情况下是建议放在私有目录中。
Android Gradle项目Hotfix热修复技术的接入的更多相关文章
- 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术
在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...
- Android 热修复技术(1)---原理
热修复技术分为几部分: 原理介绍 Android HotFix源码分析 自定义框架 1.Android分包MultiDex原理 首先Dex是什么东西? Dex就是Window里面的exe文件 也就是可 ...
- 全面了解Android热修复技术
WeTest 导读 本文探讨了Android热修复技术的发展脉络,现状及其未来. 热修复技术概述 热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现.国内大部 ...
- Android热修复技术原理详解(最新最全版本)
本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...
- Android热修复技术选型(不在市场发布新版本的情况下,直接更新app)
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到 ...
- Android热修复技术选型——三大流派解析
声明,本文转载自微信公众号文章 2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们 ...
- 包建强的培训课程(15):Android App热修复技术
@import url(/css/cuteeditor.css); Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈 ...
- Android热修复技术总结
https://blog.csdn.net/xiangzhihong8/article/details/77718004 插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高 ...
- android Qzone的App热补丁热修复技术
转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ...
随机推荐
- JS学习--DOM
1.概念 文档对象模型DOM,定义访问和处理HTML文档的标准方法.DOM将HTML呈现为带有元素.属性和文本的树结构(节点树). 2.document.getElementById("id ...
- Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)
发客户端一定要做的就是自动更新模块,否则每次版本升级都是一个头疼的事.下面是Electron应用使用electron-builder配合electron-updater实现自动更新的解决方案. 1.安 ...
- Java基础系列--Executor框架(一)
文章来源:http://www.cnblogs.com/V1haoge/p/8393618.html 一.Executor框架介绍 Executor框架是JDK1.5之后出现的,位于juc包中,是并发 ...
- JavaScript之惰性函数
前不久看到javascript的性能优化的这里,有关惰性函数 假如同一个函数有许多判断来检测函数,而我们每一次调用,都会判断检测函数 例如: function addEvent (type, elem ...
- CF 741D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [dsu on tree 类似点分治]
D. Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths CF741D 题意: 一棵有根树,边上有字母a~v,求每个子树中最长的边,满 ...
- BZOJ 2303: [Apio2011]方格染色 [并查集 数学!]
题意: $n*m:n,m \le 10^6$的网格,每个$2 \times 2$的方格必须有1个或3个涂成红色,其余涂成蓝色 有一些方格已经有颜色 求方案数 太神了!!!花我三节课 首先想了一下只有两 ...
- BZOJ 2738: 矩阵乘法 [整体二分]
给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行 ...
- 如何用JavaScript制作循环图形
[图题思路] 1.确定图形一共几行,即为外层的循环的次数 2.确定每行有几种元素,代表有几个内层循环 3.确定每种元素的个数,即为每个内层循环的次数Tips:通常,找出每种元 ...
- zend framework框架学习走起——从零开始,点击记录-安装
zend framework第一步,先来安装下zend framework框架. 先介绍下,我这边的php配置环境,为图省事,我是安装wampserver来搭载php环境的,,php+Apache+m ...
- php+redis 学习 五 消息推送
<?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 发布 * * @example php publi ...