zoukankan      html  css  js  c++  java
  • Android之移动热修复

    阿里云最近推出了移动热修复服务,听说这个服务傻瓜式接入,性能相对较好,对新技术比较好奇的我决定尝试一下。


    移动热修复.png


    首先,需要开通这个服务,创建应用


    创建应用.png


    然后,在项目中接入服务。按照文档所述,
    第一步:gradle远程仓库依赖, 打开项目找到app的build.gradle文件,添加如下配置:
    添加maven仓库地址:

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

    第二步:添加gradle坐标版本依赖:

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

    第三步:在AndroidManifest.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"/>
        <!--读取手机设备码-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    文档中并没有提到最后一个权限,不过我运行项目的时候有提示需要这个权限。
    第四步:配置AndroidManifest文件:

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

    这些信息可以在新建的应用中找到


    应用信息.png


    第五步:混淆配置:

    #基线包使用,生成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

    第六步:在Application中初始化:
    initialize的调用应该尽可能的早,必须在Application.attachBaseContext()或者Application.onCreate()的最开始进行SDK初始化操作,否则极有可能导致崩溃。

    // 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();

    到此,集成完毕。
    接下来,开始测试。
    我刚开始直接在原有项目中撸了一遍,结果跟友盟有冲突(看来尝试新东西还是得新建项目,偷不得懒)。。。所以又新建了一个项目,重新撸一遍。。。
    1.旧版本:不显示“HelloWord”;
    2.新版本:显示“HelloWord”;
    3.下载补丁工具:https://help.aliyun.com/document_detail/53247.html?spm=5176.doc53240.6.548.o2zESp
    4.使用补丁工具生成补丁。
    5.上传补丁文件。在APP列表中,点击“管理”,添加版本(版本要和app版本一致)。


    添加版本.png


    点击对应版本的“查看详情”,上传补丁。


    上传补丁.png


    点击对应补丁版本的“查看详情”,里面可以发布补丁。
    6.发布补丁。

    最后手机上的APP没有立即显示“HelloWord”,关闭重启APP后成功显示“HelloWord”。虽然没有即时生效,但至少成功更新了。

  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/shenchanghui/p/7162088.html
Copyright © 2011-2022 走看看