本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布

转载请请注明出处:

前言

上个月,阿里发布了旗下第三代的热修复:Sophix,在你阅读这篇文章之前,可以先看看这篇文章,相信你看完了会更加的有兴趣,阿里推出业界首个非侵入式热修复方案Sophix,颠覆移动端传统更新流程!

我也是在集成使用tinker的时候发现了Sophix,tinker的傻瓜式应用虽说简单,但各种参数也麻烦,所以公司项目的客服端热更新,我想试一下Sophix。
好了,闲话不多说,我们来折腾折腾!

集成

1 注册帐号&申请内测资格

阿里云注册开发则帐号,注册成功后进入控制台,添加移动热修复服务,如图:

Sophix-阿里第三代非侵入式热修复 - 图1
点击热修复服务后,会跳转到内测资格申请,一般来说,也就个把小时就能通过申请,如图:

Sophix-阿里第三代非侵入式热修复 - 图2
具体的申请我就不做详细的教程了,申请成功后“移动热修复”就会如图添加到控制台里的导航栏里:

Sophix-阿里第三代非侵入式热修复 - 图3
点击进入就可以创建app进行开发了,此处提醒一句,创建app后你要回到“移动热修复”的根界面,系统会自动根据你app同时创建andrioid和IOS两个app,进入app后面的管理才能看到RSASECRET,如图:

Sophix-阿里第三代非侵入式热修复 - 图4

Sophix-阿里第三代非侵入式热修复 - 图5之所以多说一句是因为我找这个RSASECRET找了半天都没找到在哪儿,还提交了个工单问是不是没有这个参数值了!创建应用还有什么不懂的,看阿里官方文档

前期准备工作准备的差不多,就可以环境集成了

2 环境集成

如图,在项目app下的bulid.gradle中添加maven仓库地址和坐标版本依赖:
Sophix-阿里第三代非侵入式热修复 - 图6

3 代码配置

首先,在Manifest中配置参数:
Sophix-阿里第三代非侵入式热修复 - 图7
然后,重构application初始化Sophix:

Sophix-阿里第三代非侵入式热修复 - 图8
到此为止,所有的集成配置都完成了,可以开始测试了。

测试

1 补丁生成

我们在主界面中写个Textview,让他显示“我是首次运行的”,签名打出第一包,命名first,安装运行显示:

Sophix-阿里第三代非侵入式热修复 - 图9

Sophix-阿里第三代非侵入式热修复 - 图10
然后我们对代码进行改动,弹出一个Toast。

Sophix-阿里第三代非侵入式热修复 - 图11
签名打出第二个包,命名second,现在我们就需要用到阿里的补丁工具SophixPatchTool,
下载运行SophixPatchTool.exe,添加包:

Sophix-阿里第三代非侵入式热修复 - 图12
点击设置进行签名配置,补丁输出路径:

Sophix-阿里第三代非侵入式热修复 - 图13
高级设置是对比范围,设置是否强制冷启动,可忽略。
Sophix-阿里第三代非侵入式热修复 - 图14
点击Go开始打补丁,日志会详细打印出补丁情况,也可导出日志。
补丁打完后,在输出目录里会有一个sophix-patch.jar,这个就是我们需要的补丁包。

2上传发布

先添加版本号,成功后在版本号后的“查看详情中”上传补丁:
Sophix-阿里第三代非侵入式热修复 - 图15

Sophix-阿里第三代非侵入式热修复 - 图16
上传成功后,依然在“查看详情”中发布。阿里建议我们在正式发布之前,使用测试工具[hotfixdebug]

调试成功后再发布。
发布完成后,重新启动App,运行如图,
Sophix-阿里第三代非侵入式热修复 - 图17

Sophix-阿里第三代非侵入式热修复 - 图18

成功搞定!

总结

Sophix和Tinker,专业对比我还不好评价,只说两次不同集成给我的直观感受,总结如下:
优点:
  1· Sophix集成简单,不需要配置繁琐的各种参数。
  2· Sophix支持即时生效(事实上我第一次运行first版本后,直接就弹出了toast,而此时后台数据显示设备加载成功数为1,设备推送成功数为0)。
  3· Sophix支持run instant,而tinker不支持。编译中不支持run instant,速度大大降低!
  4· Sophix的补丁是基于阿里自身的SophixPatchTool打包生成,不是在AS中生成的,有种解耦的感觉,而且不需要备份太多的版本。

缺点:
  处于内测阶段,以后是否会免费未置可否(应该不会)
  PS:今天(2017-8-16),阿里自动电话服务,告知明天起,Sophix商业收费

相关链接

本文源码地址:github源码
阿里云平台:阿里云
Sophix官方文档:文档
补丁工具:SophixPatchTool
测试工具:[hotfixdebug]
阿里热修复技术全解析文档:深入理解Android热修复技术原理

碎碎念:**
1 虽然说专业的事儿给专业的人去做,但是copy代码的时候还是要仔细,我copy AppID到manifest中,结果前面多了个空格,导致值无效,调试了小半会儿才发现问题,诸兄亦是如此,如果诸兄喜欢,给个喜欢!

2 至于Sophix这个名字,阿里的解释是来源于Sophic(明智的)+ FIX,一个更明智的热修复方案。但是阿里很多工具或者链接都是用fix起名而不是用hix,所以,我更喜欢喊他Sopfix!