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

前言

这几天开始接触热修复,体验了一把阿里热修复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要进行热修复的包。


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

  • 补丁输出路径:<必填> 指定生成补丁之后补丁的存放位置,必须是已存在的目录。
  • Key Store Path:<选填>本地的签名文件的路径,不输入则不做签名。
  • Key Store Password:<选填>证书文件的密码。
  • Key Alias:<选填>Key的别名。
  • Key Passwrod:<选填>Key的密码。
  • AES Key:<选填>自定义aes秘钥, 必须是16位数字或字母的组合。必须与setAesKey中设置的秘钥一致。
  • Filter Class File:<选填>本地的白名单类列表文件的路径,放进去的类不会再计算patch,文件格式: 一行一个类名。


    高级里我只去掉强制冷启动,你们也可以不操作这里。


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


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


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



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


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


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


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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容