美文网首页开源框架
阿里热修复方案Sophix实战

阿里热修复方案Sophix实战

作者: 自然like | 来源:发表于2017-07-24 00:54 被阅读229次

1、前言

前段时间在微信的一个公众号看到了一篇文章
阿里震撼业界—推出首个非侵入式热修复方案Sophix,颠覆移动端传统发版更新流程!
对此非常感兴趣,因为一直以来自己也想要在项目中加入热更新的功能,曾经试过了微信的Tinker,Gradle配置起来也有点点麻烦,构建的过程时间也比较长,当时项目比较赶,也就没有继续往下实践了。

看到了阿里的Sophix方案引入确实比较方便,简单到只需要两句代码,当然,实践起来还是有很多需要注意的地方,如有不慎,恐怕会引起崩溃。

阿里云移动热修复Sophix官网:https://www.aliyun.com/product/hotfix

2、非侵入性(原话)

我们的打包过程不会侵入到apk的build流程中。我们所需要的,只有已经生成完毕的新旧apk,而至于apk是如何生成的——是Android Studio打包出来的、还是Eclipse打包出来的、或者是自定义的打包流程,我们一律不关心。在生成补丁的过程中间既不会改变任何打包组件,也不插入任何AOP代码,我们极力做到了——不添加任何超出开发者预期的代码,以避免多余的热修复代码给开发者带来困扰。


3、实践中的一些问题

接入步骤可查看官方文档,比较简单,下面是写入Application的两句代码

// initialize最好放在attachBaseContext最前面
SophixManager.getInstance().setContext(this)
                .setAppVersion(appVersion)
                .setAesKey(null)
                .setEnableDebug(true)
                .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                    @Override
                    public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
                        // 补丁加载回调通知
                        if (code == PatchStatus.CODE_LOAD_SUCCESS) {
                            // 表明补丁加载成功
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
                            // 建议: 用户可以监听进入后台事件, 然后应用自杀
                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {
                            // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
                            // SophixManager.getInstance().cleanPatches();
                        } else {
                            // 其它错误信息, 查看PatchStatus类说明
                        }
                    }
                }).initialize();
// queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();
3.1、多次补丁的情况,基线包需要多次修复补丁
image

已经修复了V.1版本,当需要更新V.2版本的补丁,应该是以哪个为基线包?应该是使用哪个补丁?这里V版本是基线包,patch3是补丁。

3.2、项目在Android4.4版本会遇到崩溃现象,应该如何避免?

Sophix的初始化代码要在Application的最前面,而且尽量使用系统的类,不要使用log等,最好就是什么代码都不写,回调方法也不写代码,确保不会发生崩溃现象。Sophix在修复的时候回整包dex修复,如果有其他代码可能会影响到修复过程。

3.3、Android5.0多dex分包的处理

实践的过程中遇到,项目方法数大于64k,已经采用dex分包技术,最小支持的API版本如果大于21,即Android5.0的时候,编译出来的apk包解压后可能会有好几十个dex分包(如下图所示,正常来说应该是1、2个),该问题会导致在差分包打补丁的时候会出错,因此只需要修改最小支持的API版本在5.0以下即可。


image
3.4、项目使用360加固,能否支持?

测试过了,是支持的。但我个人的测试范围比较小,在阿里钉钉群里面有人反映,360加固后会出现崩溃现象,且再也无法启动,只能卸载重装。这里我没遇到过,但官方客服并没有说支持,也就是说,出现问题并不会快速响应帮忙解决。

3.5、采用代码混淆 + 不加固的方式来发布应用,对于混淆文件mapping.txt的处理

应用在上线打包APK时,往往会进行混淆操作,但是由于修复前后两个APK混淆结果不同会导致patch无效,无法修复bug。所以,需要注意的是:应用打包APK的时候修复前后两个APK必须使用同一份mapping.txt,以保证两个APK混淆结果一致。

如果app应用了混淆配置,那么需要做如下处理。打包之前,将mapping.txt文件移动到了当前模块的目录下,再将混淆文件proguard-rules.pro进行如下操作。

#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下
#修复后的项目使用,保证混淆结果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize
3.6、项目中多版本、Debug、Release版本的热修复控制

建议不需要热更新的版本在

initialize()
queryAndLoadNewPatch()

方法之前加入判断,不然会报错。

3.7、对比腾讯微信Tinker热修复方案

腾讯微信Tinker方案也非常强大,也有一个完善的补丁后台管理,不需要我们的后台接入就能够轻松实现热修复的功能。

但有个问题,Tinker需要在Gradle配置里面做比较多的配置脚本,导致编译的时候也会非常占用时间,接入成本相对Sophix来说更大一些。

3.8、更多问题

官方FQ Android接入问题


4、更深入的学习《深入理解Android热修复技术原理》

免费下载!业界首部安卓热修复宝典出炉,阿里技术大牛联袂推荐

相关文章

  • 阿里热修复方案Sophix实战

    1、前言 前段时间在微信的一个公众号看到了一篇文章阿里震撼业界—推出首个非侵入式热修复方案Sophix,颠覆移动端...

  • Android高级进阶之-手动实现AndFix的热修复方案

    现在市面上主流的热修复方案当属两座大山:Sophix和Tinker。Sophix和Andfix都是阿里团队的杰作,...

  • 阿里sophix 热修复方案

    https://alitech-private.oss-cn-beijing.aliyuncs.com/15198...

  • 阿里热修复——sophix

    集成前准备 1.登录、注册阿里云2.依次选择:产品→移动云→移动热修复→立即开通→管理控制台→创建app(填写信息...

  • 阿里Sophix热修复

    一、官方文档 首先,官方文档,官方文档,官方文档!Sophix 热修复 二、个人总结 1.本地调试成功,发布之后为...

  • 阿里热修复Sophix使用

    学习热修复,觉得阿里的热修复Sophix使用挺简单的,是个入门学习热修复的好例子,于是按照文档自己写例子开始集成(...

  • 腾讯热修复Tinker初探

    热补丁修复框架,极大的方便了开发者热修复自己线上App的出现的bug和漏洞。之前已经尝试了阿里热修复SopHix和...

  • 浅尝阿里Sophix热修复

    按照官方文档,一步一步的来,集成失败,来找我!! 原理不详解,一知半解,怕带偏了,应用层开发会用就行 要主动调用q...

  • 阿里百川Hotfix热更新

    目前处于公测阶段的Android 热修复技术,学习下,以后应该会变成收费的。 阿里云Sophix 3.0.6现已上...

  • Android移动热修复--Sophix

    阿里百川最新热修复技术Sophix:http://www.jianshu.com/p/823b3ac7033e S...

网友评论

    本文标题:阿里热修复方案Sophix实战

    本文链接:https://www.haomeiwen.com/subject/zvxvkxtx.html