bugly-tinker热更新的使用说明

热更新的使用说明

打基准包

  • 修改tinkerId 的值,

    tinkerId = "2.2.0.0-base"
    

​ 在项目app目录中有一个tinker-support.gradle的文件,这个是bugly-tinker的支持插件,每次发布全量包的时候需要修改tinkerId的值,全量包指的的以前没有集成tinker时的包。tinkerId的值tinkerId = "2.2.0.0-base"其中值是app中的build.gradle中的versionName+base,代表的是基准包,当每次发版的时候请修改这个值。

  • 打包的流程:

bugly-tinker热更新的使用说明_第1张图片bugly-tinker热更新的使用说明_第2张图片bugly-tinker热更新的使用说明_第3张图片

打包完之后的基准包在bakApk中,上图圈起来的文件请保存,因为以后的补丁包是以这个为准的

打补丁包

  • 修改bug

  • 进入tinker-support.gradle文件

    1 修改文件中的 appName 的值,其中appName的值为上图的包的名字

    def appName = "app-1104-17-14-54"
    

    2 修改baseApk的值,只需要修改ThreeMobile_1offical_v2.2.0.0_11_04_17_14.apk这一部分就可以,这个就是基准包的名字

    baseApk="${bakPath}/${appName}/ThreeMobile_1offical/ThreeMobile_1offical_v2.2.0.0_11_04_17_14.apk"
    

    3 修改tinkerId的值

    tinkerId = "2.2.0.0-patch-01"
    
  • 打补丁包流程
    bugly-tinker热更新的使用说明_第4张图片bugly-tinker热更新的使用说明_第5张图片bugly-tinker热更新的使用说明_第6张图片

  • 上传到bugly平台

    bugly平台地址:https://beta.bugly.qq.com
    bugly-tinker热更新的使用说明_第7张图片bugly-tinker热更新的使用说明_第8张图片
    bugly-tinker热更新的使用说明_第9张图片
    bugly-tinker热更新的使用说明_第10张图片

当发下发补丁后,自测需要半个小时才能在手机端看到修改的bug。

附:

tinker-support.gradle文件

apply plugin: 'com.tencent.bugly.tinker-support'

def bakPath = file("${buildDir}/bakApk/")

/**
 * 此处填写每次构建生成的基准包目录
 */
def appName = "app-1104-17-21-09"
/**
 * debug isEnable = false
 * 正式包 isEnable = true
 *
 */
def isEnable = true
/**
 * 对于插件各参数的详细解析请参考
 */
tinkerSupport {

    // 开启tinker-support插件,默认值true
    enable = isEnable
    tinkerEnable = isEnable
    // 指定归档目录,默认值当前module的子目录tinker
    autoBackupApkDir = "${bakPath}"

    // 是否启用覆盖tinkerPatch配置功能,默认值false
    // 开启后tinkerPatch配置不生效,即无需添加tinkerPatch
    overrideTinkerPatchConfiguration = true

    // 编译补丁包时,必需指定基线版本的apk,默认值为空
    // 如果为空,则表示不是进行补丁包的编译
    // @{link tinkerPatch.oldApk }
    baseApk = "${bakPath}/${appName}/offical_v2.2.0.0_11_04_17_21.apk"

    // 对应tinker插件applyMapping
    baseApkProguardMapping = "${bakPath}/${appName}/offical-mapping.txt"

    // 对应tinker插件applyResourceMapping
    baseApkResourceMapping = "${bakPath}/${appName}/offical-release-R.txt"

    // 构建基准包和补丁包都要指定不同的tinkerId,并且必须保证唯一性
    tinkerId = "2.2.0.0-patch-02"

    // 构建多渠道补丁时使用
    // buildAllFlavorsDir = "${bakPath}/${baseApkDir}"

    // 是否启用加固模式,默认为false.(tinker-spport 1.0.7起支持)
    // isProtectedApp = true

    // 是否开启反射Application模式
    enableProxyApplication = true

    // 是否支持新增非export的Activity(注意:设置为true才能修改AndroidManifest文件)
    supportHotplugComponent = true

}

/**
 * 一般来说,我们无需对下面的参数做任何的修改
 * 对于各参数的详细介绍请参考:
 * https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
 */
tinkerPatch {
    //oldApk ="${bakPath}/${appName}/app-release.apk"
    tinkerEnable = isEnable
    ignoreWarning = false
    useSign = true
    dex {
        dexMode = "jar"
        pattern = ["classes*.dex"]
        loader = []
    }
    lib {
        pattern = ["lib/*/*.so"]
    }

    res {
        pattern = ["res/*", "r/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]
        ignoreChange = []
        largeModSize = 100
    }

    packageConfig {
    }
    sevenZip {
        zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
//        path = "/usr/local/bin/7za"
    }
    buildConfig {
        keepDexApply = false
        //tinkerId = "1.0.1-base"
        //applyMapping = "${bakPath}/${appName}/app-release-mapping.txt" //  可选,设置mapping文件,建议保持旧apk的proguard混淆方式
        //applyResourceMapping = "${bakPath}/${appName}/app-release-R.txt" // 可选,设置R.txt文件,通过旧apk文件保持ResId的分配
    }
}

bug:

  • 当在集成的时候会报一个注解的错误需要在gradle.properties文件中添加
android.enableD8.desugaring = true
android.useDexArchive = true
android.useDeprecatedNdk=true
  • 有的时候当打完的包会报没有找到基准包,,提示未匹配到可用应用补丁包的App版本,这个时候需要让自己的包联网运行一次,才可以,但是有时是tinker-support.gradle里面的问题,这个时候需要把热更新的官网的文档在看一遍,对比一下自己是哪里不对。我自己就是在反射application那里出错了,导致一直更新不成功。

官网文档地址:
https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20181014122344

你可能感兴趣的:(Android)