A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大山哥哥 于 2017-6-24 16:18 编辑

引言
2017年6月11日,手淘技术团队联合阿里云正式发布了史上首个非侵入式移动热更新解决方案——Sophix。在咱们黑马android课程体系中,在讲到热修复的时候,咱们所讲的也是阿里提供的AndFix(https://github.com/alibaba/AndFix)。
接下来说下关于AndFix以及现在推出的新的解决方案,两者之间的区别是什么呢?AndFix底层固定结构的替换方案稳定性不好,其使用范围也存在着诸多限制,虽然可以通过改造代码绕过限制来达到相同的修复目的,但这种方式既不优雅也不方便。而更大的问题是,Andfix只提供了代码层面的修复,对于资源和so的修复都还未能实现。而Sophix能做到类修复、资源修复、so文件修复, 补丁即时生效,不需要应用重启。最重要的是Sophix简单!

废话不多说,咱们开始正式进入正题, Sophix( https://www.aliyun.com/product/hotfix)主要的应用场景是修复线上bug以及快速轻量升级。

创建应用
先在管理控制台创建应用。


创建成功后MHub控制台可以查看到对应App.


返回Hotfix控制台,刷新页面后可以看到对应的Hotfix App。




接入应用
首先在咱们项目主module目录下的gradle文件中添加maven仓库地址以及配置sophix依赖。
      
配置完成后开始进行gradle编译。编译完成后,咱们则开始进入写代码得阶段。
配置权限

配置相关meta信息
至于写法,非常简单,只需要注意几个参数所对应得意思就ok关于初始化,需要注意的是initialize的调用应该尽可能的早,必须在程序入口的最开始进行(即ApplicationonCreate方法)SDK初始化操作,否则极有可能导致崩溃。而查询服务器是否有可用补丁的操作可以在后面的任意地方。        
到此为止,其实操作得初始化已经ok~至于补丁得修补,其实sophix已经帮咱们搞定了。
生成补丁
首先大家需要明白一个概念,什么叫做热修复。大家可以简单理解为,在用户不知情的情况下偷偷的把程序得漏洞给修复或者添加新的功能。而要想在用户不知情的前提下实现,首先就是不能引导用户安装apk。所以咱们只能通过其他得方式来实现,而这里就是通过补丁包得形式来搞定。只要程序检测到有补丁存在就加载补丁中得内容从而来实现上述需求。补丁生成工具下载地址:
·        Mac版本打包工具地址:·        http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_macos.zip
·        
Windows版本打包工具地址:·        http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_windows.zip
·        Linux版本打包工具地址:·        http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_linux.zip
第一件事,咱们需要提供两个版本得apk,一个是存在bugapk,一个是修复bug后打包得apk。其中有BUG的简称A,修复过后的简称B。注意:A,B都是经过签名得apk



那既然B是正常得apk。那么咱们就得参照AB去比对,然后生成出来一个补丁,而A能和补丁文件能够实现B的结果。
这里有三个选项,官方也有给出详细得解释:
1. 强制冷启动:勾选的话强制生成补丁包为需要冷启动才能修复的格式。默认不选的话,工具会根据代码变更情况自动选择即时热替换或者冷启动修复。
2. 不比较资源:打补丁时不比较资源的变化。
3. 不比较SO库:打补丁时不比较SO库的变化。 接下来点击设置来配置打包得相关签名信息。
接下来点击GO!按钮然后工具就会帮咱们在桌面生成了一个叫做sophix-patch.jar的文件。

到此为止,咱们已经提供了A(有问题)B(修复问题)和补丁文件。


配合调试工具进行测试
调试工具用于
patch正式发布前的调试环节,当然,咱们这里就以本地补丁进行测试咯~
调试工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/hotfix_debug_tool-release.apk 下载后安装,界面如下:

使用步骤如下:1.      输入程序包名并且点击连接应用,在下方查看结果。

2.      如果结果显示成功则输入补丁位于手机具体路径。然后点击本地应用补丁。这里我将补丁放在/sdcard/目录下

如果大家看到这个结果,那说明咱们其实已经实现了,但是要注意的是,需要先关闭A然后再重新打开该应用。
Ok。咱们的流程到此走完了,但是大家要注意,在实际开发得情况下,生成补丁得时候应该是存在阿里云管理后台的。然后在目标应用上去创建对应版本然后将对应版本得补丁包上传上去。
至于管理后台的配置,官方有提供非常详细得文档,大家可以去了解下。https://help.aliyun.com/document_detail/51434.html?spm=5176.doc27781.6.552.SSnLII



3 个回复

倒序浏览

回帖奖励 +1

厉害了我的哥
回复 使用道具 举报
赞了再说
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马