https://github.com/AItsuki/HotFix

Issues

  1. MAC系统无法自动打包补丁,原因可能是路径分隔符问题
  2. 使用谷歌multidex分包后无法注入代码(开启multidex之后,jar包保存路径改变了)
  3. 暂不支持productFlavors

以上问题有空再改,最近正在忙其他事情,公司项目也准备重构。 而且此项目主要是科普和学习热补丁技术,有兴趣的可以自行解决上述问题。

一、HotFix简介

一个基于dex分包的热补丁框架,目前只支持gradle 1.5以上版本 具有以下特性:

  1. 支持混淆
  2. 自动生成补丁包
  3. 加载补丁包时进行签名校验

项目演示

二、使用方式

首先在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打包即可自动生成补丁了。

三、说明

  1. 在Release签名打包的时候会重新生成hash.txt,如果开启混淆的话还会生成mapping.txt,自动生成的补丁包是基于这个版本校验而来的。
  2. 在debug模式下直接运行或者打包会校验hash.txt和mapping.txt,自动生成补丁包并且为补丁包签名。
  3. 将生成的补丁包复制到sdcard根目录,重启应用即可实现热修复。

需要注意的是,如果在Release打包中开启了混淆,那么自动生成补丁的时候也需要将debug开启混淆,否则会将整个项目的所有类都打包成补丁包。

debug开启混淆方式如下

3.1
关于签名校验

只有使用Release产出的apk,加载补丁的时候才会进行签名校验。

如果你手机上安装的是debug包,那么不会进行签名校验。

3.2
关于android6.0以上

补丁包不能从sdcard中加载,因为android6.0后有运行时权限处理。从sdcard中加载只是为了方便测试和演示,一般情况下是建议放在私有目录中。

Android Gradle项目Hotfix热修复技术的接入的更多相关文章

  1. 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术

    在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...

  2. Android 热修复技术(1)---原理

    热修复技术分为几部分: 原理介绍 Android HotFix源码分析 自定义框架 1.Android分包MultiDex原理 首先Dex是什么东西? Dex就是Window里面的exe文件 也就是可 ...

  3. 全面了解Android热修复技术

    WeTest 导读 本文探讨了Android热修复技术的发展脉络,现状及其未来. 热修复技术概述 热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现.国内大部 ...

  4. Android热修复技术原理详解(最新最全版本)

    本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结   通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...

  5. Android热修复技术选型(不在市场发布新版本的情况下,直接更新app)

    2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到 ...

  6. Android热修复技术选型——三大流派解析

    声明,本文转载自微信公众号文章 2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们 ...

  7. 包建强的培训课程(15):Android App热修复技术

    @import url(/css/cuteeditor.css); Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈 ...

  8. Android热修复技术总结

    https://blog.csdn.net/xiangzhihong8/article/details/77718004 插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高 ...

  9. android Qzone的App热补丁热修复技术

    转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ...

随机推荐

  1. maven项目引入sqljdbc4 找不到包的完美 解决方案。

    今天碰到了这个问题,解决了,顺便做一下记录.首先来 重现 一下这个问题,maven install报错,说 找不到这个包,但是其实 我已经安装了. 我们 再来 看看 maven本地仓库里面有 什么,这 ...

  2. bash启动加载过程

  3. ABP官方文档翻译 5.2 动态We API层

    动态Web APID层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteS ...

  4. git指令总结

    在学习flask之前,先汇总一下Git的指令. mkdir filedir 创建文件夹filedir cd filedir 进入文件夹 pwd 显示当前工作目录 git init 初始化git仓库 g ...

  5. Oracle 12cR1 RAC 在VMware Workstation上安装(中)—图形界面安装

    Oracle 12cR1 RAC 在VMware Workstation上安装(中)—图形界面安装 1.1  图形界面安装 1.1.1  安装GRID 安装日志:/u01/app/oraInvento ...

  6. webrtc底层一对一连接过程探索(三)

    一.连接过程继续解读-----fun33-fun35解读 完整代码如下: //fun33-37 console.error('fun35-37==>2332==>2332'); var q ...

  7. Linux压缩解压命令汇总

    01-.tar格式 解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName (注:tar是打包,不是 ...

  8. python怎么实现数组增加一行或多行

    对数组增加一行或一列很简单,网上一搜一大把的事例.比如增加一行或一列: import numpy as np a = np.array([[1, 2, 3]]) row = a[0] col = a[ ...

  9. 关于一些php规范

    <?php /** * 符合psr-1,2的编程实例 * * @author GreenForestQuan */ namespace Standard; // 顶部命名空间 // 空一行 us ...

  10. .NET Core UI框架Avalonia

    .NET Core UI框架Avalonia,Avalonia是一个基于WPF XAML的跨平台UI框架,并支持多种操作系统:Windows(.NET Framework,.NET Core),Lin ...