Android 热补丁修复框架,自动生成带签名的补丁包

HotFix

项目地址:AItsuki/HotFix 

简介: Android 热补丁修复框架,自动生成带签名的补丁包

更多:作者   提 Bug   

标签:

 

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 中加载只是为了方便测试和演示,一般情况下是建议放在私有目录中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值