美文网首页
android SopHix 热修复框架 操作实践

android SopHix 热修复框架 操作实践

作者: 杨hai | 来源:发表于2017-06-15 23:17 被阅读9145次

    通过这篇文章了解到 阿里 又出来了新的热修复框架。今天写了个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项目基础笔记

    相关文章

      网友评论

          本文标题:android SopHix 热修复框架 操作实践

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