阿里云移动热修复Sophix问题汇总

为了解决项目中安卓在线更新安装包过大以及线上BUG修复的及时性问题,决定在2.x开始集成热修复功能。

分别尝试了微信的Tinker、美团的Robust以及阿里的第一代热修复框架Andfix,但考虑修复补丁包生效实时性、对目前的项目改动大小以及后期对补丁包的管理等问题,最终考虑了阿里云最新热修复框架Sophix,

几个主流热修复框架对比如下(阿里云官网提供,Sophix是最后一列):

在这里插入图片描述
根据官网的描述,Sophix几乎囊括了前面框架的所有优势,唯一的劣势就是收费,考虑到免费额度(50000个去重设备 + 20次补丁查询次数/设备/天)已经完全够用于项目初期。并且对于开发这块,官网对“接入复杂度”的描述使用了“傻瓜式接入“,由此看来,应该没什么难度了。

那么是不是真的这么简单呢?根据这两天测试的空档,把整个集成流程完整地走了一遍,还是有几个坑,遂成档以记录之。

根据阿里开发文档的描述,总体流程还是清晰的:

https://help.aliyun.com/document_detail/181015.html?spm=a2c4g.11186623.6.552.65af788f3zK6B9
在这里插入图片描述
1、开通热修复服务
这步比较简单,点一下就行了,过程不再赘述。

需要注意的是,配置页只有AppKey和AppSecrect信息
在这里插入图片描述
RSA只能在去这里查(RSA集成SDK会使用)
在这里插入图片描述
在这里插入图片描述
2、集成sdk
根据官方指导,必须有个自定义Application实现SophixApplication,如果已经有了自定义的Application,须以@SophixEntry注解指明,并Manifest中注册实现了SophixApplication的Application。

如果当前项目使用了MultiDex,则必须在onCreate()方法中调用MultiDex.install(this),项目中就需要调用。

关于配置参数,为了安全起见,应该通过SophixManager#setSecretMetaData指定,尽管Manifest中可以,但在解压apk文件时会暴露。

特别强调,自定义的Application中,千万不要出现Android Framework以及sophix lib中之外的引用,否则生成补丁失败。

3、生成补丁
这地方的坑我认为是最大的。

首先是安装SophixPatchTool解压版,其中exe文件无法以非管理员身份打开,在”网管“的协助下才解决。

其次,将打包debug apk后,使用工具在长达1个半多的时内始终显示”开始构建补丁“,如下图。
在这里插入图片描述
本为以为是项目太大导致时间过长,遂决定创建一个新的demo项目,结果出现同样的问题。

接着想到是不是因为没有管理员权限(第一次打开软件有报”兼容性提示“),于时让旁边iOS小伙伴用自己mac电脑试试,结果OK,这就排除的apk文件的问题。

然而。。。。

问题恰恰出现在apk上,根据我一贯的做事风格,先提个工单再自己找原因。

阿里云反馈速度很快,赞!

在这里插入图片描述
让我尝试用7zip解压文件,果然出现提示(Sophix也是先7zip解压,再比较差异),所以卡在这里了,但补丁工具没有任何提示,也是挺纳闷的。

最后,阿里云给定的解决方案如下 :
在这里插入图片描述
先是尝试使用release包,如果生产包可以的话,也无伤大雅,只要后面集成的时候用生产包比对补丁即可,很可惜,这种方式即使7zip没有提示,却同样卡在了”开始构建补丁“这步。

用mac是不是可能的,一次两次还可以了,时间一长无疑增加别人的工作量。

权衡再三,降级gradle版本,之后便是修改gradle降级导致的问题,此处省略一万字。

4、调试补丁
本以为大功告成了,补丁调试也是一个费时的活。

根据阿里”对生产环境保持敬畏之心“的提示,在线上发布补丁之前先做好本地补丁调试。

在这里插入图片描述
具体做法就是下载一个官网上的apk装到手机上,如下图:
在这里插入图片描述
装好调试软件后,输入应用包名(如未安装应用则安装旧包),点击连接,接着扫描补丁二维码后便可在应用中下载并加载补丁包。

在加载过程中,出现了上图中Code:35的错误,工单咨询后是第二步集成时的参数配置错了,把项目的参数配到demo上了,这点要细心,尤其是RSA复制的时候不要有空格等。

加载后需要杀掉进程后才能生效,也就是官方文档中所说的冷启动。

关于启动方式,官网的意思是,如果在打补丁包的时候选择了”强制冷启动“,那就肯定是冷启动生效了;如果没勾选,则Sophix会根据补丁的性质来决定启动方式。

于是,我在打补丁的时候去掉了默认的勾选,发现修改class方法和资源时仍然没有热启动生效,具体待研究。
在这里插入图片描述
5、发布补丁
这个没什么好说的,主要关注这个”实际通知人数“,这个就是上面说的收费项20次查询调用,在应用中要手动调用queryAndLoadNewPatch方法。

补丁生效后,当用户在手机设置里清除数据后,当前应用又回到基版本(无任何补丁的版本),根据工单咨询,只能再次调用queryAndLoadNewPatch方法。

6、总结
以上便是Sophix的集成过程,尤其要注意红色字体,在后面的使用过程上,保不定会有各种问题,届时再来更新。

持续更新=========================================================================

1、什么时候冷启动?什么时候热启动?

您好,测试即时生效 1、补丁工具可以不勾选强制冷启动,这样就由工具自行判断是否生成冷/热补丁。 注意,不是不勾选强制冷启动,就一定是热补丁。 2、不要改首启动页,加载补丁去修复也是需要时间的。 3、可以试下改动都是public修饰的类或方法,尽量不要改动static。 4、资源或so改动一般都是冷启动生效的。 5、实际建议使用冷启动补丁,热补丁可能少数机型加载有问题,如果使用热补丁,尽量全面测试后再发布。 6、最简单示例:public类中一个public方法,先不要static修饰,打个log或返回值都可以,然后只修方法输出。 更详细的冷热划分,看看下面的技术文章吧。 Sophix技术概览: https://yq.aliyun.com/articles/103527 即时生效的代码热修复: https://yq.aliyun.com/articles/74598 资源热更新技术详解: https://yq.aliyun.com/articles/96378 Dalvik下冷启动修复的新探索: https://yq.aliyun.com/articles/107396 Art下代码冷启动方案: https://yq.aliyun.com/articles/222892 SO库修复方案: https://yq.aliyun.com/articles/217377 《深入探索Android热修复技术原理》实体书出版!现已上架各书店,欢迎感兴趣的朋友了解~ 天猫:https://detail.tmall.com/item.htm?id=575682644381 当当:http://product.dangdang.com/1058631415.html 京东:http://item.jd.com/12424434.html

2、您好,请问:如果在版本1上打了多个补丁后将app版本升级到了2。 1、在补丁管理控制台中对版本1的所有补丁进行回滚,会影响已经升级到版本2的app吗? 2、如果再对版本2上的后续补丁(无版本升级)进行回滚,基线版本是1还是2? 以上,请帮忙回复下,谢谢!

您好,需要确定下多个补丁后将app版本升级到了2,是apk级别升级吗,升级安装版本2吗。 回复您是和不是两种情况: 1、是升级安装版本2, 1)不影响。 2)回到版本2。 2、只是通过补丁将版本1升级到版本2,没有apk升级安装。 1)会的。 2)回到版本1。 总结:升级安装版本,那各个版本之间互不影响,独立的。

补充:通过补丁方式也可以升级app(versionName变化),但基线包还是第一次打包前的app版本。比如进行了以下操作:

原始版本2.2.0 →修改versionName打包后版本为2.3.0

那么,再次打包需以2.2.0为基线版本打包,而不是2.3.0,回滚同样道理。

记住:无论补丁升级了多少次,基线版本仍然是最原始安装升级的那一次。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meta章磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值