1. 程式人生 > >使用阿裏百川HotFix

使用阿裏百川HotFix

string 加載 方式 asus eas idl 外部 posit use

前言:首先要弄懂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. #-applymapping mapping.txt
  6. #hotfix
  7. -keep class com.taobao.sophix.**{*;}
  8. -keep class com.ta.utdid2.device.**{*;}

SDK接口配置:

  1. package xin.ceet.com.tencentdemo;
  2. import android.app.Application;
  3. import com.taobao.sophix.PatchStatus;
  4. import com.taobao.sophix.SophixManager;
  5. import com.taobao.sophix.listener.PatchLoadStatusListener;
  6. /**
  7. * Created by asus on 2017/7/5.
  8. */
  9. public class MyApplication extends Application {
  10. private String appVersion = "1.0.0";
  11. @Override
  12. public void onCreate() {
  13. super.onCreate();
  14. SophixManager.getInstance().setContext(this)
  15. .setAppVersion(appVersion)
  16. .setAesKey(null)
  17. .setEnableDebug(true)
  18. .setPatchLoadStatusStub(new PatchLoadStatusListener() {
  19. @Override
  20. public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
  21. // 補丁加載回調通知
  22. if (code == PatchStatus.CODE_LOAD_SUCCESS) {
  23. // 表明補丁加載成功
  24. } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
  25. // 表明新補丁生效需要重啟. 開發者可提示用戶或者強制重啟;
  26. // 建議: 用戶可以監聽進入後臺事件, 然後應用自殺
  27. } else if (code == PatchStatus.CODE_LOAD_FAIL) {
  28. // 內部引擎異常, 推薦此時清空本地補丁, 防止失敗補丁重復加載
  29. // SophixManager.getInstance().cleanPatches();
  30. } else {
  31. // 其它錯誤信息, 查看PatchStatus類說明
  32. }
  33. }
  34. }).initialize();
  35. SophixManager.getInstance().queryAndLoadNewPatch();
  36. }
  37. }

版本說明:

  1. 說明一:patch是針對客戶端具體某個版本的,patch和具體版本綁定
  2. eg. 應用當前版本號是1.1.0, 那麽只能在後臺查詢到1.1.0版本對應發布的補丁, 而查詢不到之前1.0.0舊版本發布的補丁.
  3. 說明二:針對某個具體版本發布的新補丁, 必須包含所有的bugfix, 而不能依賴補丁遞增修復的方式, 因為應用僅可能加載一個補丁
  4. eg. 針對1.0.0版本在後臺發布了一個補丁版本號為1的補丁修復了bug1, 然後發現此時針對這個版本補丁1修復的不完全, 代碼還有bug2, 在後臺重新發布一個補丁版本號為2的補丁, 那麽此時補丁2就必須同時包含bug1bug2的修復才行, 而不是只包含bug2的修復(bug1就沒被修復了)

使用阿裏百川HotFix