Android微信Thinker热修复详细接入

一.Android热修复接入

公司app考虑接入热修复,现在流行的也就是阿里的Sophix和微信的Thinker,接入过程也是坑不断,顺利接入后做个总结。真想吐槽下微信的接入文档简直像坨那啥,两边不统一,还模糊不清。要么人家都是大佬,我是菜鸡。初次接入,有不对滴地方还望指出,共同进步,谢谢。

微信Thinker在GayHub上的 接入指南
微信Thinker官网的SDK接入指南

阿里Sophix接入指南

本篇是总结微信Thinker的接入流程:

二.接入流程

2.1

在Thinker官网http://tinkerpatch.com/用邮箱注册一个账号,新建APP,输入当前APP的版本号,得到该APP的appKey,如图
在这里插入图片描述

2.2

在项目的gradle.properties文件中,添加

TINKER_VERSION=1.9.2
TINKERPATCH_VERSION=1.2.2

2.3

moduleapp的build.gradledependencies中添加

//若使用annotation需要单独引用,对于tinker的其他库都无需再引用
annotationProcessor("com.tinkerpatch.tinker:tinker-android-anno:${TINKER_VERSION}") {
    changing = true
}
compileOnly("com.tinkerpatch.tinker:tinker-android-anno:${TINKER_VERSION}") { changing = true }
implementation("com.tinkerpatch.sdk:tinkerpatch-android-sdk:${TINKERPATCH_VERSION}") {
    changing = true
}

2.4

工程build.gradle 中修改

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // TinkerPatch 插件
        classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:${TINKERPATCH_VERSION}"
    }
}

2.5

根目录(app目录下)新建tinkerpatch.gradle(官方demo文件中有),复制以下内容到该文件:

apply plugin: 'tinkerpatch-support'

/**
 * TODO: 请按自己的需求修改为适应自己工程的参数
 */
def bakPath = file("${buildDir}/bakApk/")
def baseInfo = "app-4.2.21-1029-10-28-25"
def variantName = "dev_test-release"

/**
 * 对于插件各参数的详细解析请参考
 * http://tinkerpatch.com/Docs/SDK
 */
tinkerpatchSupport {
    /** 可以在debug的时候关闭 tinkerPatch **/
    /** 当disable tinker的时候需要添加multiDexKeepProguard和proguardFiles,
     这些配置文件本身由tinkerPatch的插件自动添加,当你disable后需要手动添加
     你可以copy本示例中的proguardRules.pro和tinkerMultidexKeep.pro,
     需要你手动修改'tinker.sample.android.app'本示例的包名为你自己的包名, com.xxx前缀的包名不用修改
     **/
    tinkerEnable = true
    reflectApplication = true
    /**
     * 是否开启加固模式,只能在APK将要进行加固时使用,否则会patch失败。
     * 如果只在某个渠道使用了加固,可使用多flavors配置
     **/
    protectedApp = false
    /**
     * 实验功能
     * 补丁是否支持新增 Activity (新增Activity的exported属性必须为false)
     **/
    supportComponent = true

    autoBackupApkPath = "${bakPath}"

	/** 注意: 使用自己申请的appkey,这个是demo里的 **/
    appKey = "0d36f053a76c76c"

    /** 注意: 若发布新的全量包, appVersion一定要更新 **/
    appVersion = "1.0.0"

    def pathPrefix = "${bakPath}/${baseInfo}/${variantName}/"
    def name = "${project.name}-${variantName}"

    baseApkFile = "${pathPrefix}/${name}.apk"
    baseProguardMappingFile = "${pathPrefix}/${name}-mapping.txt"
    baseResourceRFile = "${pathPrefix}/${name}-R.txt"

    /**
     *  若有编译多flavors需求, 可以参照: https://github.com/TinkerPatch/tinkerpatch-flavors-sample
     *  注意: 除非你不同的flavor代码是不一样的,不然建议采用zip comment或者文件方式生成渠道信息(相关工具:walle 或者 packer-ng)
     **/
}

/**
 * 用于用户在代码中判断tinkerPatch是否被使能
 */
android {
    defaultConfig {
        buildConfigField "boolean", "TINKER_ENABLE", "${tinkerpatchSupport.tinkerEnable}"
    }
}

/**
 * 一般来说,我们无需对下面的参数做任何的修改
 * 对于各参数的详细介绍请参考:
 * https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
 */
tinkerPatch {
    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
    }
}

2.6

tinkerpatch.gradle 文件一些参数说明
在这里插入图片描述
在这里插入图片描述

注意替换appKey

2.7

mouduleapp的build.gradle顶部 引入该文件,添加如下代码

apply from: 'tinkerpatch.gradle'

2.8

在项目的Application文件onCreate中添加Thinker初始化代码

ApplicationLike thinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();
TinkerPatch.init(thinkerApplicationLike)
        .reflectPatchLibrary()
        .fetchPatchUpdate(true)
        .setPatchRollbackOnScreenOff(true)
        .setPatchRestartOnSrceenOff(true)
        .setFetchPatchIntervalByHours(3);
TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();

2.9

开始打包基准包(旧的,有bug需要修改的包) 如图
在这里插入图片描述

根据左边方框里,生成的文件路径,修改对应的baseInfovariantName 的值,打补丁包的时候需要,否则找不到文件。如图

在这里插入图片描述
生成的有bug的基准包安装到手机上,打开后清除该app进程。 如图
在这里插入图片描述

2.10

修改项目里有bug的地方,即需要热修复的问题,添加日志,修改文字,颜色等。就是修改代码。
在这里插入图片描述

2.11

打补丁包,生成补丁,如图

在这里插入图片描述

生成的patch_signed_7zip.apk 文件就是热修复补丁,位置如下图

在这里插入图片描述

2.12

然后在官网平台新建的APP中,添加新的补丁,输入版本号即VersionName ,然后选择刚刚的补丁文件后提交,如图
在这里插入图片描述

注意默认是全量下发,先需要开发预览测试成功后,才可灰度(免费版木有)或者全量下发。

2.13

测试需要使用测试工具,官网文档里说明,可点击 下载

使用如图,打开即可
在这里插入图片描述

2.14

开关打开后,杀掉之前打开的旧包app的进程,然后重新启动,热修复即可生效。如图
在这里插入图片描述

三.总结

步骤感觉很多,其实都很简单,只是写的比较详细了点儿。
有几点需要注意的地方:

3.1 tinkerpatch.gradle里的一些字段要注意,比如是否开启加固模式,只能在APK将要进行加固时使用,否则会patch失败。

3.2 tinkerpatch.gradle里的appVersion 一定要和app、补丁的版本号对应,比如都是1.0

3.3 打基准包和打补丁包,都会在bakApk下和output下新生成文件。要选对应的。

3.4 有时候生效慢,但是后台检测很快,可以在补丁检测里查看到下载成功后,再次尝试杀进程,重启app,看是否生效,如果后台检测都没有数据,基本上是哪一步走错了。如图

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值