移动热修复(Mobile Hotfix)是阿里云提供的全平台App热修复服务方案。产品基于阿里巴巴首创hotpatch技术,提供最细粒度热修复能力,让您无需等待实时修复应用线上问题。当产品已有功能出现问题,无需发版,即可发补丁,实时修复。
Hotfix产品优势:
- 跨平台支持
支持Android平台。同一版本的Android端首次被打补丁时,不用重启直接加载(支持热启动);支持iOS平台 - 补丁版本管理
开发者可以在控制台创建多个版本,同时管理多个补丁,方便查看补丁状态 - 本地测试
提供了调试工具实现本地测试,方便开发者在正式发布前,在自己的手机本地进行测试。 - 多种发布操作
提供多种发布方式,方便开发者根据自身业务需要选择性使用。灰度发布、全量发布、发布停止、发布回滚 - 数据统计
可以统计:成功推送设备数:每当有设备发起一次更新请求,且补丁下载成功,则记为一次成功推送;累计加载设备数:每当有设备成功加载该补丁,则记为一次累计加载。 - 补丁一键清除
使用补丁一键清除功能,开发者可以对指定应用版本下面的所有补丁进行一键清除操作,用户下次打开应用时,将自动清除本地所有补丁,回滚至无补丁状态。
一步一步接入Hotfix SDK
Hotfix接入地址
我自己是按照官方文档做成功了一遍,做了一个app,写了一个崩溃处,为问题apk,然后进行处理崩溃,再打出修复版apk,生成补丁文件,发布版本,然后原有崩溃出自动修复。
- 登录阿里云账号后,进入移动研发平台,创建产品。
- 配置项目信息
- 配置项目级目录下build.gradle文件。
buildscript {
repositories {
google()
jcenter()
maven {
url 'http://maven.aliyun.com/nexus/content/repositories/releases/'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
// 添加emas-services插件
classpath 'com.aliyun.ams:emas-services:1.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
maven {
url 'http://maven.aliyun.com/nexus/content/repositories/releases/'
}
}
}
配置app目录下build.gradle文件
apply plugin: 'com.aliyun.ams.emas-services'
在移动平台创建应用完成,然后开始创建补丁。
1.创建补丁版本
2.下载补丁生工工具。分别上传bug安装包和已修复版安装包,安装包需要正式签名工具打包生成。
3.填写签名文件keystore信息。
基础选项
旧包:<必填> 选择基线包路径(有问题的APK)。
新包:<必填> 选择新包路径(修复过该问题APK)。
日志:打开日志输出窗口。
高级:展开高级选项,见1.2.2。
设置:配置其他信息。
GO!:开始生成补丁。
高级选项
强制冷启动:勾选的话强制生成补丁包为需要冷启动才能修复的格式。默认不选的话,工具会根据代码变更情况自动选择即时热替换或者冷启动修复。
不比较资源:打补丁时不比较资源的变化。
不比较SO库:打补丁时不比较SO库的变化。
4.弹出打包前注意事项弹框
5.生成新旧包差异补丁文件成功。
6.上传补丁文件
7.发布补丁,自动修复bug。
灰度发布
发布类型分为灰度发布和全量发布,顾名思义,全量发布就是一次性发布给所有用户使用。
灰度策略
需要根据用户体量来决定发布人数,也可以根据产品需求来决定。一般可以投放10%的量来观察。
我们可以通过用户id、用户手机号、设备id的尾号来决定给哪些用户推送升级信息。
阿里Hotfix热修复原理
Andfix 采用的方法是,在已经加载了的类中直接在 native 层替换掉原有方法,是在原来类的基础上进行修改的。其核心在于 replaceMethod 函数,所以只支持方法替换,对于方法的增删,资源更新,so 文件更新及类和属性的替换等都是不支持的。
优点:
即时生效
缺点:
AndFix不支持新增方法,新增类,新增field等