• 使用阿里百川HotFix


    前言:首先要弄懂HotFix是干嘛的,不然就别向下看了。这里仅仅根据官方文档的代码书写,亲测可用,不做理论指导。


    Android Studio集成:

        添加maven仓库地址:

    1. repositories {
    2.    maven {
    3.        url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
    4.    }
    5. }

        添加gradle坐标版本依赖:

    1. dependencies {
    2.     compile 'com.taobao.android:alisdk-hotfix:2.0.9'
    3. }

        权限说明:

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

        配置AndroidManifest文件:

    1. <meta-data
    2. android:name="com.taobao.android.hotfix.IDSECRET"
    3. android:value="App ID" />
    4. <meta-data
    5. android:name="com.taobao.android.hotfix.APPSECRET"
    6. android:value="App Secret" />
    7. <meta-data
    8. android:name="com.taobao.android.hotfix.RSASECRET"
    9. android:value="RSA密钥" />

        混淆配置:

    1. #基线包使用,生成mapping.txt
    2. -printmapping mapping.txt
    3. #生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下
    4.  
    5. #修复后的项目使用,保证混淆结果一致
    6. #-applymapping mapping.txt
    7.  
    8. #hotfix
    9. -keep class com.taobao.sophix.**{*;}
    10. -keep class com.ta.utdid2.device.**{*;}

        SDK接口配置:

    1. package xin.ceet.com.tencentdemo;
    2.  
    3. import android.app.Application;
    4.  
    5. import com.taobao.sophix.PatchStatus;
    6. import com.taobao.sophix.SophixManager;
    7. import com.taobao.sophix.listener.PatchLoadStatusListener;
    8.  
    9. /**
    10.  * Created by asus on 2017/7/5.
    11.  */
    12.  
    13. public class MyApplication extends Application {
    14.     private String appVersion = "1.0.0";
    15.     @Override
    16.     public void onCreate() {
    17.         super.onCreate();
    18.         SophixManager.getInstance().setContext(this)
    19.                 .setAppVersion(appVersion)
    20.                 .setAesKey(null)
    21.                 .setEnableDebug(true)
    22.                 .setPatchLoadStatusStub(new PatchLoadStatusListener() {
    23.                     @Override
    24.                     public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
    25.                         // 补丁加载回调通知
    26.                         if (code == PatchStatus.CODE_LOAD_SUCCESS) {
    27.                             // 表明补丁加载成功
    28.                         } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
    29.                             // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
    30.                             // 建议: 用户可以监听进入后台事件, 然后应用自杀
    31.                         } else if (code == PatchStatus.CODE_LOAD_FAIL) {
    32.                             // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
    33.                             // SophixManager.getInstance().cleanPatches();
    34.                         } else {
    35.                             // 其它错误信息, 查看PatchStatus类说明
    36.                         }
    37.                     }
    38.                 }).initialize();
    39.         SophixManager.getInstance().queryAndLoadNewPatch();
    40.     }
    41.  
    42. }

        版本说明:

    1. 说明一:patch是针对客户端具体某个版本的,patch和具体版本绑定
    2.  
    3. eg. 应用当前版本号是1.1.0, 那么只能在后台查询到1.1.0版本对应发布的补丁, 而查询不到之前1.0.0旧版本发布的补丁.
    4. 说明二:针对某个具体版本发布的新补丁, 必须包含所有的bugfix, 而不能依赖补丁递增修复的方式, 因为应用仅可能加载一个补丁
    5.  
    6. eg. 针对1.0.0版本在后台发布了一个补丁版本号为1的补丁修复了bug1, 然后发现此时针对这个版本补丁1修复的不完全, 代码还有bug2, 在后台重新发布一个补丁版本号为2的补丁, 那么此时补丁2就必须同时包含bug1bug2的修复才行, 而不是只包含bug2的修复(bug1就没被修复了)

        

  • 相关阅读:
    说谎的简单工厂模式设计模式&amp;工厂方法模式&amp;Abstract Factory模式
    [Gevent]gevent 网络抓取问答
    使用 Capistrano 和写作 Ruby 迭代边缘部署
    【从翻译mos文章】在oracle db 11gR2版本号被启用 Oracle NUMA 支持
    [Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛
    [RxJS] Logging a Stream with do()
    [RxJS] Handling a Complete Stream with Reduce
    [RxJS] Completing a Stream with TakeWhile
    [RxJS] Adding Conditional Logic with Filter
    [RxJS] Combining Streams with CombineLatest
  • 原文地址:https://www.cnblogs.com/ceet/p/7121107.html
Copyright © 2020-2023  润新知