前言
这几天开始接触热修复,体验了一把阿里热修复Sophix的傻瓜式接入。虽说是傻瓜式接入,但实际操作起来还是遇到不少坑,而且Sophix的官方文档有些地方有点难理解,部分图片也跟现在的不一样,所以今天我整理了一下我接入Sophix的过程,希望对大家有所帮助。当然,如果你对热修复并不了解,可以先去了解下Android的热修复,再来看这个文章。
一、Sophix是什么
Sophix提供了一套更加完美的客户端服务端一体的热更新方案,做到了图形界面一键打包、加密传输、签名校验和服务端控制发布与灰度功能,让你用最少的时间实现最强大可靠的全方位热更新。
二、接入步骤
1.AndroidStudio集成 gradle远程仓库依赖, 打开项目找到app的build.gradle文件,添加maven仓库地址:
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
复制代码
添加gradle坐标版本依赖:
compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.2'
复制代码
2.配置AndroidManifest文件
在AndroidManifest.xml文件中的application节点添加:
将上述value中的值分别改为通过阿里平台HotFix服务申请得到的APP ID、App Secret和RSA密钥(这三个东西是在阿里云平台创建应用后才能看到,可以等注册平台创建应用后,再来填写),出于安全考虑,也可以使用setSecretMetaData这个方法进行设置,后续配置会讲到这个方法。
添加权限:
<! -- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<! -- 外部存储读权限,调试工具加载本地补丁需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
复制代码
3.接入方式 目前,Sophix提供两种接入方式:快速接入 和 稳健接入,这部分大家可以直接点击进去看官方文档,这部分文档还是写得比较详细的,前文提到的setSecretMetaData方法也在快速接入中有详细介绍。由于稳健接入完美地兼容Android 8.0以后版本,且初始化与应用原先业务代码完全隔离,所以我直接使用了稳健接入。
使用稳健接入时要注意不要忘记添加这句代码:
// queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();//查询是否有新的补丁
复制代码
我当时就是直接看了稳健接入的文档,但是这文档并没有这句代码(这句代码在快速接入文档里有),结果导致我所有都配置好之后没有实现热修复功能。这句代码的作用是查询是否有新的补丁,我是放在Application里的onCreate()中。
三、注册平台
Sophix热修复是在阿里云移动研发平台上的,他为用户提供一个可视化控制台,用起来比较直观简便。由于官方文档里有部分图片与现在平台呈现的不一致,所以我将创建应用发布补丁等图都截了下来。接下来内容图片有点多,看得懂官方文档的可以跳过这一节。
1.注册账号开通服务 注册就不说了,注册完在产品中找到移动热修复,首次使用要开通服务。
开通服务后,点击添加产品,输入产品名称。
然后进入你添加的产品。
-
Mac版本打包工具地址:ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatch…
-
Windows版本打包工具地址:ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatch…
-
Linux版本打包工具地址:ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatch…
该工具提供了Windows和macOS和Linux版本,Windows下运行SophixPatchTool.exe,macOS下运行SophixPatchTool.app,Linux下(Ubuntu 16.04 64bit最佳)运行SophixPatchTool。并且需要安装Java环境且在JDK7或以上才能正常使用。
我使用的是Windows版本的打包工具,旧包就是存在bug的apk,新包就是更新完bug要进行热修复的包。
- 补丁输出路径:<必填> 指定生成补丁之后补丁的存放位置,必须是已存在的目录。
- Key Store Path:<选填>本地的签名文件的路径,不输入则不做签名。
- Key Store Password:<选填>证书文件的密码。
- Key Alias:<选填>Key的别名。
- Key Passwrod:<选填>Key的密码。
- AES Key:<选填>自定义aes秘钥, 必须是16位数字或字母的组合。必须与setAesKey中设置的秘钥一致。
- Filter Class File:<选填>本地的白名单类列表文件的路径,放进去的类不会再计算patch,文件格式: 一行一个类名。
高级里我只去掉强制冷启动,你们也可以不操作这里。
补丁生成后,我们就可以上传补丁。在之前创建的版本上点击上传补丁,上传成功后,发布状态会变成已就绪。
点击详情,可以看到右上角有个补丁验证,在新建发布前,我们一定要先自己测试下热修复是否成功。这里需要用官方提供的调试工具来测试,具体操作可以看官方的调试补丁章节。
调试无误后,就可以新建发布了,发布主要有两种类型:灰度发布和全量发布,灰度发布可以限定人数。官方要求发布前请严格按照:扫码内测 => 灰度发布 => 全量发布的流程进行,以保证补丁包能够正常在所有Android版本的机型上生效。
写到这里就结束啦,可能有些地方说的不太清楚,大家有问题可以留言。不过Sophix并不支持修改AndroidManifest.xml文件,不支持添加四大组件,也不能改版本号(改了也不会生效),所以跟我一样想用热修复充当更新app功能的小伙伴可能要动下脑筋咯!
最后附上:Andorid接入常见问题