zoukankan      html  css  js  c++  java
  • Android热修复(HotFix)实战

      线上的BUG一直是程序员头疼的问题。有时候仅仅是因为几行的代码,就能让你的用户损失严重。谷歌在Android Studio 加入了Insttan Run 机制。通过Apk动态加载的技术实现了应用非安装而进行代码层的改变。之后QQ空间团队的补丁开始了热更新的浪潮。用户不需要通过手动操作,进行App的版本更新,极大的保障了用户对于产品的粘合度,对于开发者而言能使用到这项技术当然再好不过,市面上的热更新,热修复他们的叫称不同,功能相同只是支持的范围有所差别。目前可用的开放平台有腾讯的Tinker以及HotFix。无奈腾讯需要收费,这里就介绍如何集成阿里的HotFix。并且一些踩坑的处理。

     首先,你需要一个淘宝账号登陆阿里百川根据角色注册对应账号。之后申请一个App获得他的三个参数:APP ID,App Secret,RSA。这是我的个人测试账号,参数就给你们看啦。如下:

     下载RSA到你的电脑。

      接入应用:

     使用Android Studio.在gradle 文件中添加如下:

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

    在moudle的gradle中添加如下:

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

    在清单文件中添加权限:

    <! -- 网络权限 -->
    <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"/>

    在Application中添加百川SDK的参数:

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

    混淆:

    #基线包使用,生成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.**{*;}

    之后我们分别在Application中进行代码的初始化化,在onCreate()中优先请求百川补丁下载:

    public void onCreate() {
            super.onCreate();
            initHotFix();
    }
       private void initHotFix() {
    
            SophixManager.getInstance().queryAndLoadNewPatch();
        }

    在attatchBaseContent中做补丁接收操作,这里的版本要和你后台生成的补丁包的版本一样:

           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) {
    //                            // 表明补丁加载成功
    //                            Toast.makeText(MyApplication.this, "加载补丁成功", Toast.LENGTH_SHORT).show();
    //                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
    //                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
    //                            // 建议: 用户可以监听进入后台事件, 然后应用自杀
    //                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {
    //                            // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
    //                            // SophixManager.getInstance().cleanPatches();
    //                        } else {
    //                            // 其它错误信息, 查看PatchStatus类说明
    //                        }
                        }
                    }).initialize();

    对于新旧版本的补丁你需要在官网下载生成补丁的工具,之后再进行补丁包的上传。官方还有补丁的测试工具。把补丁上传之后发布就饿可以进行热更新了。下面我们来测试一下,我在我的界面的新版本中把三个banner隐藏了。并且进行打补丁。看看效果如何:

    可以看到已经成功的应用了补丁。

  • 相关阅读:
    BZOJ3992 [SDOI2015]序列统计
    BZOJ3991 [SDOI2015]寻宝游戏
    BZOJ4007 [JLOI2015]战争调度
    BZOJ4006 [JLOI2015]管道连接
    BZOJ4004 [JLOI2015]装备购买
    P2567 [SCOI2010]幸运数字
    P1447 [NOI2010]能量采集
    比赛-Round 2 (11 Jul)
    题解-弹飞绵羊 (HNOI2015)
    归并排序模板
  • 原文地址:https://www.cnblogs.com/lovelyYakir/p/6903369.html
Copyright © 2011-2022 走看看