前言:首先要弄懂HotFix是干嘛的,不然就别向下看了。这里仅仅根据官方文档的代码书写,亲测可用,不做理论指导。
Android Studio集成:
添加maven仓库地址:
- repositories {
- maven {
- url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
- }
- }
添加gradle坐标版本依赖:
- dependencies {
- compile 'com.taobao.android:alisdk-hotfix:2.0.9'
- }
权限说明:
- <! -- 网络权限 -->
- <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"/>
配置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密钥" />
混淆配置:
- #基线包使用,生成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.**{*;}
SDK接口配置:
- package xin.ceet.com.tencentdemo;
- import android.app.Application;
- import com.taobao.sophix.PatchStatus;
- import com.taobao.sophix.SophixManager;
- import com.taobao.sophix.listener.PatchLoadStatusListener;
- /**
- * Created by asus on 2017/7/5.
- */
- public class MyApplication extends Application {
- private String appVersion = "1.0.0";
- @Override
- public void onCreate() {
- super.onCreate();
- 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();
- SophixManager.getInstance().queryAndLoadNewPatch();
- }
- }
版本说明:
- 说明一:patch是针对客户端具体某个版本的,patch和具体版本绑定
- eg. 应用当前版本号是1.1.0, 那么只能在后台查询到1.1.0版本对应发布的补丁, 而查询不到之前1.0.0旧版本发布的补丁.
- 说明二:针对某个具体版本发布的新补丁, 必须包含所有的bugfix, 而不能依赖补丁递增修复的方式, 因为应用仅可能加载一个补丁
- eg. 针对1.0.0版本在后台发布了一个补丁版本号为1的补丁修复了bug1, 然后发现此时针对这个版本补丁1修复的不完全, 代码还有bug2, 在后台重新发布一个补丁版本号为2的补丁, 那么此时补丁2就必须同时包含bug1和bug2的修复才行, 而不是只包含bug2的修复(bug1就没被修复了)