ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-06-29 16:06:44  阅读:551  来源: 互联网

标签:https 修复 Sophix 汇总 补丁 阿里 冷启动 版本 com


为了解决项目中安卓在线更新安装包过大以及线上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,回滚同样道理。

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

标签:https,修复,Sophix,汇总,补丁,阿里,冷启动,版本,com
来源: https://blog.csdn.net/m0_48179608/article/details/118336807

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有