HotFix阿里百川热修复框架的初步使用

热修复火了这么久,然而我最近才开始尝试使用它,原因是看了微信公众号上推送了一篇关于微信tinker热修复使用的文章,然后网上一搜,就开始使用hotfix了,它是andfix的优化版。
关于几种热修复的对比,网上有很多文章,我看的是这篇

1、配置build.gradle

仓库

repositories {
 maven { url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories" }
 }

或者

repositories {
 maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
 }

以及依赖包

compile 'com.taobao.android:alisdk-hotfix:2.0.9'

或者

 compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.2'

2、配置manifest.xml

基本权限

<! -- 网络权限 -->  
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<! -- 外部存储读权限 -->  
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

基本参数配置

<meta-data  
android:name="com.taobao.android.hotfix.IDSECRET"  
android:value="App ID" />  
<meta-data  
android:name="com.taobao.android.hotfix.APPSECRET"  
android:value="App Secret" />  
<meta-data  
android:name="com.taobao.android.hotfix.RSASECRET"  
android:value="RSA密钥" />  

以上三个值存在于阿里百川热修复控制台,用淘宝账号登陆的,这里可能需要申请一个什么公测资格的,反正填写个人及应用相关信息即可申请成功,很快。

3、初始化热修复,这段代码放在自定义Application的onCreate方法的最前面

        SophixManager.getInstance().setContext(this)
                .setAppVersion(BuildConfig.VERSION_NAME)
                .setEnableDebug(true)
                .setEnableFullLog()
                .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                    @Override
                    public void onLoad(int mode, int code, String info, 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();
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

4、生成补丁包,利用阿里百川提供的补丁生成工具,如下图所示

这里写图片描述

设置密钥信息等

这里写图片描述

这里输入相关密钥信息就好,点击确定回到上面的对话框,再次点击GO

这里写图片描述

最后会生成一个 sophix-patch.jar 格式的补丁文件

5、把这个补丁文件上传到阿里百川控制台你创建的应用里,经过调试工具调试后,选择全量发布即可

这里写图片描述

这里写图片描述

出现上图这种情况意味着code: 12 当前应用已经存在一个旧补丁, 应用重启尝试加载新补丁
只有code为1时才是加载补丁成功

其他注意点:

1、版本号
用户自行输入,版本号是为以.分割的多段数字,如1.0.1。版本号必须与用户App内的appVersion相同,如果不相同将导致补丁发布不成功。

2、Android Studio打包时要注意两个都选,像我之前只选择了第二个就无法成功安装,参考这里

这里写图片描述

这里写图片描述

这里写图片描述

使用扫码模式时就会出现以上错误,可能原因是控制台没有相应版本的补丁包

3、PatchLoadStatusListener接口回调说明
参数说明
- mode: 补丁模式, 0:正常请求模式 1:扫码模式 2:本地补丁模式
- code: 补丁加载状态码, 详情查看PatchStatusCode类说明
- info: 补丁加载详细说明, 详情查看PatchStatusCode类说明
- handlePatchVersion: 当前处理的补丁版本号, 0:无 -1:本地补丁 其它:后台补丁

code说明:
code: 1 补丁加载成功
code: 6 服务端没有最新可用的补丁
code: 11 RSASECRET错误,官网中的密钥是否正确请检查
code: 12 当前应用已经存在一个旧补丁, 应用重启尝试加载新补丁
code: 13 补丁加载失败, 导致的原因很多种, 比如UnsatisfiedLinkError等异常, 此时应该严格检查logcat异常日志
code: 16 APPSECRET错误,官网中的密钥是否正确请检查
code: 18 一键清除补丁
code: 19 连续两次queryAndLoadNewPatch()方法调用不能短于3s

4、对我来说有一个比较大的坑就是热修复时不要改变versionName的值,我几次测试都是改来改去versionName的值,当然我也不知道我为啥要改,可能是觉得热修复也属于版本迭代,然后版本就要变吧,总之一句话,热修复打补丁时,versionName不要变,最后成功的打上了补丁。

5、可以简单参考其他类似文章,都是大同小异,自己试过了成功了就明白了

http://www.jianshu.com/p/4ce6ae88b6b4

http://blog.youkuaiyun.com/wu996489865/article/details/70842319

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值