什么是热更新
热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力。Bugly目前采用微信Tinker的开源方案,开发者只需要集成我们提供的SDK就可以实现自动下载补丁包、合成、并应用补丁的功能,我们也提供了热更新管理后台让开发者对每个版本补丁进行管理。
为什么使用Bugly热更新?
- 无需关注Tinker是如何合成补丁的
- 无需自己搭建补丁管理后台
- 无需考虑后台下发补丁策略的任何事情
- 无需考虑补丁下载合成的时机,处理后台下发的策略
- 我们提供了更加方便集成Tinker的方式
- 我们通过HTTPS及签名校验等机制保障补丁下发的安全性
- 丰富的下发维度控制,有效控制补丁影响范围.
- 我们提供了应用升级一站式解决方案
接下来,进入正题,记录一下自己接入Bugly热更新的几个步骤,以免忘记了就回来翻翻文章!
1.添加gradle依赖
project的build.gradle文件
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
// tinkersupport插件, 其中lastest.release指拉取最新版本,也可以指定明确版本号,例如1.0.4
classpath "com.tencent.bugly:tinker-support:1.1.5"
}
}
app module的gradle文件
// 依赖插件脚本
apply from: 'tinker-support.gradle'
....
// 多dex配置
implementation "com.android.support:multidex:1.0.3"
// 远程依赖集成方式(推荐)
implementation "com.tencent.bugly:crashreport_upgrade:1.3.6"
// 指定tinker依赖版本(注:应用升级1.3.5版本起,不再内置tinker)
implementation 'com.tencent.tinker:tinker-android-lib:1.9.9'
2.在app module下新建tinker-support.gradle文件
直接从官网的配置copy一份即可
这里需要注意几个重要的配置参数
- baseApkDir-此处理解为每次构建生成后的目录,在对一个基准包(有bug)进行打补丁包的时候,需要改这个位置的路径
- tinkerId-格式要求:xxx-version name.version code ps.base-1.0.1(1.0是versionName 1是versionCode),一定要注意对得上,否则在构建的时候会出现tinkerId not found的异常
- enableProxyApplication-这里采用反射Applcation的方式,也就是true 的情况,其他情况见Bugly文档
apply plugin: 'com.tencent.bugly.tinker-support'
def bakPath = file("${buildDir}/bakApk/")
/**
* 此处填写每次构建生成的基准包目录
*/
def baseApkDir = "app-0208-15-10-00"
/**
* 对于插件各参数的详细解析请参考
*/
tinkerSupport {
// 开启tinker-support插件,默认值true
enable = true
// 指定归档目录,默认值当前module的子目录tinker
autoBackupApkDir = "${bakPath}"
// 是否启用覆盖tinkerPatch配置功能,默认值false
// 开启后tinkerPatch配置不生效,即无需添加tinkerPatch
overrideTinkerPatchConfiguration = true
// 编译补丁包时,必需指定基线版本的apk,默认值为空