行使阿里百川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就非得同时含有bug1和bug2的修复才行, 而不是只包含bug2的修补(bug1就没被修复了)

    

相关文章