阿里热修复之Sophix的集成详解

2018-04-24  本文已影响170人  卖火柴的笨小孩

前言

这几天开始接触热修复,体验了一把阿里热修复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()中。


完成以上步骤后,不出意外的话,接入已经成功。这个时候可以通过看log信息判断是否接入成功,第一个红框是初始化信息,第二、三红框是你调用了queryAndLoadNewPatch()返回的信息。大家可以等注册好阿里云平台创建好应用获取并填写APP ID、App Secret和RSA密钥这三个东西到配置文件后,再来看log信息对不对。

三、注册平台

Sophix热修复是在阿里云移动研发平台上的,他为用户提供一个可视化控制台,用起来比较直观简便。由于官方文档里有部分图片与现在平台呈现的不一致,所以我将创建应用发布补丁等图都截了下来。接下来内容图片有点多,看得懂官方文档的可以跳过这一节。

1.注册账号开通服务
注册就不说了,注册完在产品中找到移动热修复,首次使用要开通服务。

开通服务后,点击添加产品,输入产品名称。


然后进入你添加的产品。


添加应用,输入app名称和包名,包名一定要跟项目的包名一致。



进入刚创建的应用,然后选择左边菜单栏的移动热修复。



点击右上角的应用信息,就可以看到我们初始化时需要用到的三个参数了,把他配置到我们的项目代码中。
点击左上角的功能,然后点击添加版本,这里输入的版本号要跟你项目配置文件中的versionCode一样,比如我的项目中versionCode为1,那我就写1.0。

添加完版本后,就可以开始上传补丁进行热修复了,在上传补丁前,我们要用一个叫SophixPatchTool工具来生成补丁包。

该工具提供了Windows和macOS和Linux版本,Windows下运行SophixPatchTool.exe,macOS下运行SophixPatchTool.app,Linux下(Ubuntu 16.04 64bit最佳)运行SophixPatchTool。并且需要安装Java环境且在JDK7或以上才能正常使用。

我使用的是Windows版本的打包工具,旧包就是存在bug的apk,新包就是更新完bug要进行热修复的包。


设置界面主要是设置补丁输出路径和一些其他配置,我只设置了输出路径。


然后就可以点击GO,开始生成补丁了。这里要注意的是,如果你AndroidStudio中开着install run,一定要关闭,不然你生成补丁时他会一直显示正在生成补丁,但是一直不会停止。关闭install run方法为:File->Settings->install run->去掉勾

如果生成补丁前没关install run的话,最好重新生成一下apk包再去生成一个名为sophix-patch的补丁文件。


补丁生成后,我们就可以上传补丁。在之前创建的版本上点击上传补丁,上传成功后,发布状态会变成已就绪



点击详情,可以看到右上角有个补丁验证,在新建发布前,我们一定要先自己测试下热修复是否成功。这里需要用官方提供的调试工具来测试,具体操作可以看官方的调试补丁章节。


调试无误后,就可以新建发布了,发布主要有两种类型:灰度发布全量发布,灰度发布可以限定人数。官方要求发布前请严格按照:扫码内测 => 灰度发布 => 全量发布的流程进行,以保证补丁包能够正常在所有Android版本的机型上生效。


选择好发布类型,点击发布后,你的补丁就在服务器上了。此时你关掉你的app(杀掉后台进程)重新打开,你会发现你原来设置的bug已经不存在了,说明热修复成功。


写到这里就结束啦,可能有些地方说的不太清楚,大家有问题可以留言。不过Sophix并不支持修改AndroidManifest.xml文件,不支持添加四大组件,也不能改版本号(改了也不会生效),所以跟我一样想用热修复充当更新app功能的小伙伴可能要动下脑筋咯!

最后附上:Andorid接入常见问题

上一篇下一篇

猜你喜欢

热点阅读