HotFix 阿里百川热修复接入笔记
2017-05-27 本文已影响0人
Haraway
1.使用文档链接:
2,创建应用
创建应用.png3.代码部分配置
3.1 清单文件
<!-- Hotfix配置 -->
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="xxx" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="xxx" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="xxx" />
3.2 gradle 的配置
gradle远程仓库依赖, 打开项目找到app的build.gradle文件,添加如下配置:
添加maven仓库地址:
repositories {
maven {
url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
}
}
添加gradle坐标版本依赖:
dependencies {
compile 'com.taobao.android:alisdk-hotfix:2.0.9'
}
3.3 application 里面初始化
/**
* mode: 补丁模式, 0:正常请求模式 1:扫码模式 2:本地补丁模式
* code: 补丁加载状态码, 详情查看PatchStatusCode类说明
* info: 补丁加载详细说明, 详情查看PatchStatusCode类说明
* handlePatchVersion: 当前处理的补丁版本号, 0:无 -1:本地补丁 其它:后台补丁
* <p>
* <p>
* code 0: 准备开始拉取最新补丁
* code: 1 补丁加载成功
* code: 2 sdk初始化失败 加了setUnsupportedModel
* code: 6 服务端没有最新可用的补丁
* code: 8 补丁下载失败
* code: 9 补丁下载成功
* code: 11 RSASECRET错误,官网中的密钥是否正确请检查
* code: 12 当前应用已经存在一个旧补丁, 应用重启尝试加载新补丁
* code: 13 补丁加载失败, 导致的原因很多种, 比如UnsatisfiedLinkError等异常, 此时应该严格检查logcat异常日志
* code: 14 找不到任何可加载的补丁文件 一种情况是确实没有,一种情况是需要考虑补丁文件可能放在sdcard等外部存储器中,sdk22以上版本机器需要6.0权限。
* code: 16 APPSECRET错误,官网中的密钥是否正确请检查
* code: 18 一键清除补丁
* code: 19 连续两次queryAndLoadNewPatch()方法调用不能短于3s
* errorCode:-101 异常
* <p>
*/
private void initHotfix() {
String appVersion;
try {
appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
Log.i(TAG, "appVersion==" + appVersion);
} catch (Exception e) {
appVersion = "x.x";
}
SophixManager.getInstance().setContext(this)
.setClearPreVerify(LibCoreApp.class)//过滤掉初始化不必要的父类,保证在application下初始化
.setClearPreVerify(LibExtApp.class)
.setClearPreVerify(WXApp.class)
.setClearPreVerify(GlobalApp.class)
.setAppVersion(appVersion)
// .setUnsupportedModel("2014501", android.os.Build.VERSION_CODES.KITKAT)//无法支持修复的机型加入黑名单
// .setAesKey(null)
.setAesKey("2017042020170426")//16位任意数加密
// .setEnableDebug(true) // 调试的时候可以打开,过滤sophix看日志,绕过密码签名检验。
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
// String msg = new StringBuilder("").append("Mode:").append(mode)
// .append(" Code:").append(code)
// .append(" Info:").append(info)
// .append(" HandlePatchVersion:").append(handlePatchVersion).toString();
// if (msgDisplayListener != null) {
// Log.i(TAG, "handle chenji-- " + code);
// msgDisplayListener.handle(msg, code);
// } else {
// mCode = code;
// Log.i(TAG, " chenji-- " + code);
// cacheMsg.append("\n").append(msg);
// }
// // 补丁加载回调通知
// if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// // 表明补丁加载成功
// Log.i(TAG, "表明补丁加载成功");
// } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// Log.i(TAG, "新补丁生效需要重启");
//// android.os.Process.killProcess(android.os.Process.myPid());
// // 建议: 用户可以监听进入后台事件, 然后应用自杀
// } else if (code == PatchStatus.CODE_LOAD_FAIL) {
// // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
// Log.i(TAG, "内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载");
// // SophixManager.getInstance().cleanPatches();
// } else {
// Log.i(TAG, "其它错误信息, 查看PatchStatus类说明");
// // 其它错误信息, 查看PatchStatus类说明
// }
Log.d(TAG, "\n Mode: " + mode + "\n Code: " + code + ", Info: " + info + "\n HandlePatchVersion: " + handlePatchVersion);
}
}).initialize();
}
SophixManager.getInstance().queryAndLoadNewPatch();
4.测试流程: 本地二维码测试--灰度发布测试--全量发布。注意:测试的时候需要过滤GlobalApp来查看log,对应的code等信息是否正常回调。
5.打补丁工具(打包工具)设置: http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.2SFQp9&treeId=234&articleId=105517&docType=1
如果代码改动比较大必须勾上强制冷启动,改动小可以不勾选代表是热启动修复。
如果没有修改资源文件就勾上不比较资源
如果没有so文件修改就勾上。
6. 注意: 线上补丁包最大支持5M
问题修复: 有问题就重启App,最好是等1~2分钟。
7. 操作流程:
修复bug1准备:基准包 新包1 补丁1 ,线上发布:补丁1;
操作:将基准包下载到手机,开启后首页调用查询请求补丁包,收到 code 0 开始拉取补丁包, code 9 下载补丁包成功, code 12 重启app ,重启app后返回 code 1 加载补丁1成功。
修复bug2 准备:基准包 新包2 补丁2 ,线上发布:补丁2,;
操作:在原来修复bug1后的app的基础上进行,首先,重启app,开启后首页会调用查询请求补丁包,收到 code 0 开始拉取补丁包, code 9 下载补丁包成功, code 12 表示需要重启app ,重启app后返回 code 1 加载补丁2成功。