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 ...
随机推荐
- Java多线程优化方法及使用方式
一.多线程介绍 在编程中,我们不可逃避的会遇到多线程的编程问题,因为在大多数的业务系统中需要并发处理,如果是在并发的场景中,多线程就非常重要了.另外,我们在面试的时候,面试官通常也会问到我们关于多线程 ...
- HTTP请求和MIME介绍
HTTP请求和MIME介绍 HTTP请求由三部分组成,分别是: 请求行,消息报头,请求正文. 请求行(格式): Method Request-URI HTTP-Version CRLF Method: ...
- JMeter基础教程1:若隐若现的参数化
1. 什么是参数化? 在开始学习JMeter参数化之前,我们先了解下什么是参数化: 参数化是自动化测试脚本的一种常用技巧.简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指 ...
- ABP官方文档翻译 5.3 OData集成
OData集成 介绍 安装 安装Nuget包 设置模块依赖 配置实体 创建控制器 配置 示例 获取实体列表 Request Response 获取单个实体 Request Response 使用导航属 ...
- 管理Mac的Python环境
问题描述 我的Mac自带了版本为2.7.10的Python却没有用于管理依赖的pip工具.而我在使用刚开始学习Python时,从其官网下载了安装脚本安装了3.6版本的Python.脚本自动配置了环境变 ...
- JSP基础篇
JSP可以认为是加上了Java代码块的HTML文件,常常和CSS,JS结合使用,下面是一个JSP的基本的例子. <%@ page language="java" conten ...
- BZOJ 2179 [快速傅里叶变换 高精度乘法]
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3108 Solved: 1599[Submit][Status][Di ...
- Linux 下编写服务器程序时关于Address already in use 的小错误
新手,,学习linux服务器编程的时候,bind()函数出现了Address already in use 的错误,这是因为上一次bind过后,还未释放,,只要在socket和bind之间加一个函数就 ...
- C# 使用 Lotus notes 公共邮箱发送邮件
公司的邮件系统用的是反人类的 Lotus notes, 你敢信? 最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前前后后这个问题搞了2天,由于公司的诸多条件限制,无法直接调用到公司发送邮 ...
- Python学习-使用opencv-python提取手掌和手心及部分掌纹
上次我们成功训练了手掌识别器http://www.cnblogs.com/take-fetter/p/8438747.html,可以成功得到识别的结果如图 接下来需要使用opencv来获取手掌,去除背 ...