Android热修复Tinker接入文档

 2023-09-05 阅读 147 评论 0

摘要:一、接入 ​ 按照官方文档https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20170526100125接入。 接入时使用enableProxyApplication = true方式接入 tinker-support.gradle中的bakPath更改,默认是在build文件夹下,每次cle

一、接入

​ 按照官方文档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 TaskbuildTinkerPatchOnlineRelease

三、热修复流程

  1. 发现Bug
  2. 基于taghotfix分支
  3. hotfix分支打包
  4. 修复bug并提交
  5. 打补丁包
  6. 测试补丁
  7. 全量下发

四、测试流程

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
复制代码

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/93.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息