下阿里百川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即使从不被修复了)

    

相关文章