Bugly Android热更新详解 | 您所在的位置:网站首页 › 腾讯bugly如何手动保存日志 › Bugly Android热更新详解 |
Bugly Android热更新详解
Bugly Android热更新详解
完整接入流程
Github Demo
普通打包
1、编译基准包
2、对基线版本的bug修复
3、根据基线版本生成补丁包
4、上传补丁包到平台
5、测试补丁应用效果
多渠道打包
方法1:gradle配置productFlavors方式
1. 配置productFlavors
2. 执行assembleRelease生成基线apk
3. 打渠道补丁包配置
4.执行buildAllFlavorsTinkerPatchRelease生成所有渠道补丁包
5.测试应用补丁包
方法2:多渠道打包工具打多渠道包方式(推荐)
加固打包
1.设置isProtectedApp参数
2.将基准包进行加固
3.根据未加固的基准包生成补丁包
4.测试验证
完整接入流程
打基准包安装并上报联网(注:填写唯一的tinkerId)
对基准包的bug修复(可以是Java代码变更,资源的变更)
修改基准包路径、修改补丁包tinkerId、mapping文件路径(如果开启了混淆需要配置)、resId文件路径
执行buildTinkerPatchRelease打Release版本补丁包
选择app/build/outputs/patch目录下的补丁包并上传(注:不要选择tinkerPatch目录下的补丁包,不然上传会有问题)
编辑下发补丁规则,点击立即下发
杀死进程并重启基准包,请求补丁策略(SDK会自动下载补丁并合成)
再次重启基准包,检验补丁应用结果
查看页面,查看激活数据的变化
Github Demo
https://github.com/BuglyDevTeam/Bugly-Android-Demo 普通打包 1、编译基准包配置基准包的tinkerId tinkerId最好是一个唯一标识,例如git版本号、versionName等等。 如果你要测试热更新,你需要对基线版本进行联网上报。 这里强调一下,基线版本配置一个唯一的tinkerId,而这个基线版本能够应用补丁的前提是集成过热更新SDK,并启动上报过联网,这样我们后台会将这个tinkerId对应到一个目标版本,例如tinkerId = "bugly_1.0.0" 对应了一个目标版本是1.0.0,基于这个版本打的补丁包就能匹配到目标版本。 执行assembleRelease编译生成基准包: 这个会在build/outputs/bakApk路径下生成每次编译的基准包、混淆配置文件、资源Id文件,如下图所示: 实际应用中,请注意保存线上发布版本的基准apk包、mapping文件、R.txt文件,如果线上版本有bug,就可以借助我们tinker-support插件进行补丁包的生成。 启动apk,上报联网数据 我们每次冷启动都会请求补丁策略,会上报当前版本号和tinkerId,这样我们后台就能将这个唯一的tinkerId对应到一个版本,大家测试的时候可以打开logcat查看我们的日志,如下图所示: 如果看不到log,您需要将bugly初始化的第三个参数设置为true才能看到。 2、对基线版本的bug修复未修复前 这个类有一个会造成空指针的方法。 修复后 对产生bug的类进行修复,作为补丁下次覆盖基线版本的类。 3、根据基线版本生成补丁包修改待修复apk路径、mapping文件路径、resId文件路径 执行构建补丁包的task 如果你要生成不同编译环境的补丁包,只需要执行TinkerSupport插件生成的task,比如buildTinkerPatchRelease就能生成release编译环境的补丁包。 注:TinkerSupport插件版本低于1.0.4的,需要使用tinkerPatchRelease来生成补丁包 。 生成的补丁包在build/outputs/patch目录下: 大家这里可能会有一个疑问,补丁版本是怎么匹配到目标版本的,可以双击patch包,我们提供的插件会在tinker生成的patch包基础上插入一个MF文件: 4、上传补丁包到平台上传补丁包到平台并下发编辑规则 点击发布新补丁,上传前面生成的patch包,我们平台会自动为你匹配到目标版本,你可以选择下发范围(开发设备、全量设备、自定义),填写完备注之后,点击立即下发让补丁生效,这样你就可以在客户端当中收到我们的策略,SDK会自动帮你把补丁包下到本地。 5、测试补丁应用效果启动app应用patch 如果匹配到目标版本,后台就会下发补丁策略,可以在logcat看到如下日志: 下载成功之后,我们会立即去合成补丁,可以看到patch合成的日志: 重启app查看效果 注:我们方案是基于Tinker方案的实现,需要下次启动才能让补丁生效。 多渠道打包Bugly支持两种方式进行多渠道打包: gradle配置productFlavors方式 多渠道打包工具打多渠道包方式(推荐) 方法1:gradle配置productFlavors方式 1. 配置productFlavors android { ... // 多渠道打包(示例配置) productFlavors { xiaomi { } yyb { } } ... } 2. 执行assembleRelease生成基线apk按照普通打包方式正常配置基线版本的tinkerId,然后执行assembleRelease生成不同渠道的apk,会在工程中build/bakApk/生成如下图所示文件: 3. 打渠道补丁包配置 4.执行buildAllFlavorsTinkerPatchRelease生成所有渠道补丁包如下图所示: 5.测试应用补丁包与普通打包一致。 方法2:多渠道打包工具打多渠道包方式(推荐)多渠道工具打包方式,参考这篇文章:Bugly多渠道热更新解决方案 加固打包需要集成升级SDK版本1.3.0以上版本才支持加固。 经过测试的加固产品: 腾讯乐固 爱加密 梆梆加固 360加固(SDK 1.3.1之后版本支持) 其他产品需要大家进行验证。 1.设置isProtectedApp参数在tinker-support配置当中设置isProtectedApp = true,表示你要打加固的的apk。 是否使用加固模式,仅仅将变更的类合成补丁。注意,这种模式仅仅可以用于加固应用中。 2.将基准包进行加固如果你的app需要进行加固,你需要将你打出的基准包上传到具体的加固平台进行加固,例如乐固,加固完成之后需要对apk进行重签名: jarsigner -verbose -keystore -signedjar以上命令说明: -verbose:指定生成详细输出 -keystore:指定证书存储路径 -signedjar:改选项的三个参数分别为签名后的apk包、未签名的apk包、数字证书别名 示例: jarsigner -verbose -keystore keystore/release.keystore -signedjar app-release-signed.apk app-release.encrypted.apk testres如果你使用的加固产品提供了GUI的加固和签名工具,可以通过工具来进行加固和签名。 3.根据未加固的基准包生成补丁包打patch包的操作跟普通打包方式一致。 注意:这里指定的基线版本是未加固的版本。 4.测试验证测试验证的版本是经过加固并且已经重签名后的apk,安装到测试设备并上报联网,其他操作与普通打包无异。 |
CopyRight 2018-2019 实验室设备网 版权所有 |