android SopHix 热修复框架 操作实践

通过这篇文章了解到 阿里 又出来了新的热修复框架。今天写了个demo体验了一下,记录一下步骤。

一app要做的事情:官方文章

1.申请测试账号,然后创建一个app,获取AppId,和AppSecret以及RSA密钥。上面三个参数需要配置在application节点下面:

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

2.通过gradle依赖相应的库

 maven {
            url "http://maven.aliyun.com/nexus/content/repositories/releases"
        }
compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.2'

3.在Application中的onCreate方法中配置如下代码:

SophixManager.getInstance().setContext(this)
                .setAppVersion(BuildConfig.VERSION_NAME)
                .setAesKey(null)
                .setEnableDebug(true)
                .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                    @Override
                    public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
                        Log.i("code","mode = "+mode+"info = "+ info);
                        // 补丁加载回调通知
                        if (code == PatchStatus.CODE_LOAD_SUCCESS) {
                            // 表明补丁加载成功
                            Log.i("code","表明补丁加载成功");
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
                            // 建议: 用户可以监听进入后台事件, 然后应用自杀
                            Log.i("code","用户可以监听进入后台事件, 然后应用自杀");
                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {
                            // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
                            // SophixManager.getInstance().cleanPatches();
                            Log.i("code","内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载");
                        } else {
                            // 其它错误信息, 查看PatchStatus类说明
                            Log.i("code"," 其它错误信息, 查看PatchStatus类说明");
                        }
                    }
                }).initialize();
        SophixManager.getInstance().queryAndLoadNewPatch();

4.申请对应的权限

<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" />

关于权限,在6.0以上的手机,需要动态的获取。如果没有相关的权限,启动app是检查不到新的补丁包的。我用的手华为的手机,安装app后,日志总是输出“there is not update”。原因是我没有读取内存卡的权限没有申请成功。

文章介绍SopHix是非侵入式的,意思就是在项目中依赖很少。以上就完成了所有的配置。

二:生成补丁包官方文章

通过Part2Mac ---Window 生成补丁包。相同的版本,一个包有bug,和一个已修复bug的包,通过Part2生成对应的补丁包。

三:上传补丁包到后台。官方文章

在后台新建的版本号要和存在bug的app的版本号要一致,不然app到时不知道要下载那个补丁包。
按照官网推荐的三步走发布流程。1.先本地测试,2,在灰度发布,3.最后全量发布。

遇到的问题:
1.今天我用的是华为手机测试的(手机版本7.0),前面几次测试一直失败,后面发现是没有把权限申请下来。如果不成功,建议检查一下app的权限,和网络。
2.我在后台发布成功了补丁包,有时候app需要启动好几次才能搞把补丁包加载成功,不清楚是不是我那个地方处理的不对!
3.发布到线上的版本一般都是采用了加固。而对补丁包是没有影响的。

demo地址

我的第一个kotlin项目基础笔记

推荐阅读更多精彩内容