通过这篇文章了解到 阿里 又出来了新的热修复框架。今天写了个demo体验了一下,记录一下步骤。
一app要做的事情:官方文章
1.申请测试账号,然后创建一个app,获取AppId,和AppSecret以及RSA密钥。上面三个参数需要配置在application节点下面:
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="AppId" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="AppSecret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />
2.通过gradle依赖相应的库
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.2'
3.在Application中的onCreate方法中配置如下代码:
SophixManager.getInstance().setContext(this)
.setAppVersion(BuildConfig.VERSION_NAME)
.setAesKey(null)
.setEnableDebug(true)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
Log.i("code","mode = "+mode+"info = "+ info);
// 补丁加载回调通知
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// 表明补丁加载成功
Log.i("code","表明补丁加载成功");
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// 建议: 用户可以监听进入后台事件, 然后应用自杀
Log.i("code","用户可以监听进入后台事件, 然后应用自杀");
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
// SophixManager.getInstance().cleanPatches();
Log.i("code","内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载");
} else {
// 其它错误信息, 查看PatchStatus类说明
Log.i("code"," 其它错误信息, 查看PatchStatus类说明");
}
}
}).initialize();
SophixManager.getInstance().queryAndLoadNewPatch();
4.申请对应的权限
<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" />
关于权限,在6.0以上的手机,需要动态的获取。如果没有相关的权限,启动app是检查不到新的补丁包的。我用的手华为的手机,安装app后,日志总是输出“there is not update”。原因是我没有读取内存卡的权限没有申请成功。
文章介绍SopHix是非侵入式的,意思就是在项目中依赖很少。以上就完成了所有的配置。
二:生成补丁包官方文章
通过Part2Mac ---Window 生成补丁包。相同的版本,一个包有bug,和一个已修复bug的包,通过Part2生成对应的补丁包。
三:上传补丁包到后台。官方文章
在后台新建的版本号要和存在bug的app的版本号要一致,不然app到时不知道要下载那个补丁包。
按照官网推荐的三步走发布流程。1.先本地测试,2,在灰度发布,3.最后全量发布。
遇到的问题:
1.今天我用的是华为手机测试的(手机版本7.0),前面几次测试一直失败,后面发现是没有把权限申请下来。如果不成功,建议检查一下app的权限,和网络。
2.我在后台发布成功了补丁包,有时候app需要启动好几次才能搞把补丁包加载成功,不清楚是不是我那个地方处理的不对!
3.发布到线上的版本一般都是采用了加固。而对补丁包是没有影响的。
网友评论