一、接入
按照官方文档https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20170526100125接入。
-
接入时使用
enableProxyApplication = true方式接入 -
tinker-support.gradle中的bakPath更改,默认是在build文件夹下,每次clen会清空bakPath = file("${rootProject.rootDir}/tinkerApk/") -
tinker-support.gradle中的tinkerId命名规范:- 基准包:tinkerId = "base-"+versionName
- 补丁包:tinkerId = "patch-"+versionName+"补丁序号"
二、Jenkins打包
-
正常打包流程还是按照之前的步骤执行
-
打patch包时增加配置
#打补丁包时打开,格式固定为patch-版本号-序号 export tinkerId=patch-4.8.21-6 #基准包路径 export baseApkDir=app-1124-14-32-57 #3.打[基准包]时注释,打[补丁包]需要打开 sed -i '/def baseApkDir/c'"def baseApkDir =\"${baseApkDir}\";" app/tinker-support.gradle #打补丁包时打开,PS:为了和其他tinkerId区分,查找的tinkerId前加了空格 sed -i '/tinkerId/c'"tinkerId =\"${tinkerId}\";" app/tinker-support.gradle-
tinkerId按照规范去修改 -
baseApkDie目录为有Bug的线上包的路径,拷贝最近一次打包的目录 -
修改执行的
Gradle Task为buildTinkerPatchOnlineRelease
-
三、热修复流程
- 发现
Bug - 基于
tag拉hotfix分支 - 在
hotfix分支打包 - 修复
bug并提交 - 打补丁包
- 测试补丁
- 全量下发
四、测试流程
1.在AndroidStudio中chek线上bug包代码,在Bugly.init之后增加
Bugly.setIsDevelopmentDevice(getApplicationContext(), BuildConfig.DEBUG);
2.签名一定与线上签名保持一致
3.运行代码
4.将补丁包上传至bugly热修复平台,选择开发设备下发
5.重启App,进入主界面之后,等待1-2分钟
6.再次重启App
注:如未修复,请重复5,6步骤两到三次
五、遇到的坑
-
如果有多
Flavors配置,需要在tinker-support.gradle中配置buildAllFlavorsDir = "${bakPath}/${baseApkDir}"去掉一些配置 只有打开
buildAllFlavorsDir才可以去掉// 编译补丁包时,必需指定基线版本的apk,默认值为空 // 如果为空,则表示不是进行补丁包的编译 // @{link tinkerPatch.oldApk } baseApk = "${bakPath}/${baseApkDir}/app-release.apk" // 对应tinker插件applyMapping baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt" // 对应tinker插件applyResourceMapping baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt"
-
涉及到渠道需要上传加固包的比如 360、应用宝,需要在
tinker-support.gradle中配置isProtectedApp = true注意:这个配置不会影响非加固包
-
注掉这个属性,官方文档有时候有这个属性,有时候没有。加了这个属性会导致编译不过
// 是否开启反射Application模式 enableProxyApplication = false -
混淆规则使用
proguard-android.txt不要使用混淆优化proguard-android-optimize.txt,不然在打差异包再次混淆时会报错proguardFiles getDefaultProguardFile('proguard-android.txt') -
7z配置
-
本地配置
sevenZip { zipArtifact = "com.tencent.mm:SevenZip:1.1.10" } -
Jenkins服务器配置
sevenZip { zipArtifact = "com.tencent.mm:SevenZip:1.1.10" path = "/usr/bin/7za" }
-
-
资源混淆
AndResGuard目前暂时不支持资源混淆
六、目前效果
出现过一次线上bug,使用Tinker热修复,配合bugly发布平台,总耗时大概20分钟,到目前为止修复率很高,而且没有引起任何二次bug