Bugly Android热更新打包

普通打包

1、编译基准包

配置基准包的tinkerId

Bugly Android热更新打包

tinkerId最好是一个唯一标识,例如git版本号、versionName等等。 如果你要测试热更新,你需要对基线版本进行联网上报。

这里强调一下,基线版本配置一个唯一的tinkerId,而这个基线版本能够应用补丁的前提是集成过热更新SDK,并启动上报过联网,这样我们后台会将这个tinkerId对应到一个目标版本,例如tinkerId = "bugly_1.0.0" 对应了一个目标版本是1.0.0,基于这个版本打的补丁包就能匹配到目标版本。

执行assembleRelease编译生成基准包:

Bugly Android热更新打包

这个会在build/outputs/bakApk路径下生成每次编译的基准包、混淆配置文件、资源Id文件,如下图所示:

Bugly Android热更新打包

实际应用中,请注意保存线上发布版本的基准apk包、mapping文件、R.txt文件,如果线上版本有bug,就可以借助我们tinker-support插件进行补丁包的生成

启动apk,上报联网数据

我们每次冷启动都会请求补丁策略,会上报当前版本号和tinkerId,这样我们后台就能将这个唯一的tinkerId对应到一个版本,大家测试的时候可以打开logcat查看我们的日志,如下图所示:

Bugly Android热更新打包

如果看不到log,您需要将bugly初始化的第三个参数设置为true才能看到

2、对基线版本的bug修复

未修复前

Bugly Android热更新打包

这个类有一个会造成空指针的方法。

修复后

Bugly Android热更新打包

对产生bug的类进行修复,作为补丁下次覆盖基线版本的类。

3、根据基线版本生成补丁包

修改待修复apk路径、mapping文件路径、resId文件路径

Bugly Android热更新打包

执行构建补丁包的task

Bugly Android热更新打包

如果你要生成不同编译环境的补丁包,只需要执行TinkerSupport插件生成的task,比如buildTinkerPatchRelease就能生成release编译环境的补丁包。 注:TinkerSupport插件版本低于1.0.4的,需要使用tinkerPatchRelease来生成补丁包 

生成的补丁包在build/outputs/patch目录下:

Bugly Android热更新打包

大家这里可能会有一个疑问,补丁版本是怎么匹配到目标版本的,可以双击patch包,我们提供的插件会在tinker生成的patch包基础上插入一个MF文件:

Bugly Android热更新打包

Bugly Android热更新打包

4、上传补丁包到平台

上传补丁包到平台并下发编辑规则

Bugly Android热更新打包

Bugly Android热更新打包

Bugly Android热更新打包

点击发布新补丁,上传前面生成的patch包,我们平台会自动为你匹配到目标版本,你可以选择下发范围(开发设备、全量设备、自定义),填写完备注之后,点击立即下发让补丁生效,这样你就可以在客户端当中收到我们的策略,SDK会自动帮你把补丁包下到本地。

5、测试补丁应用效果

启动app应用patch

Bugly Android热更新打包

如果匹配到目标版本,后台就会下发补丁策略,可以在logcat看到如下日志:

Bugly Android热更新打包

下载成功之后,我们会立即去合成补丁,可以看到patch合成的日志:

Bugly Android热更新打包

重启app查看效果

Bugly Android热更新打包

注:我们方案是基于Tinker方案的实现,需要下次启动才能让补丁生效。

 

原文:Bugly Android热更新详解