Tinker是腾讯推出的一种热修方案,下面介绍一下Tinker的接入步骤。

一、在工程的 build.gradle添加远程仓库依赖 jcenter

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

二、在app/build.gradle引用Tinker的sdk

dependencies {// 若使用annotation需要单独引用,对于tinker的其他库都无需再引用implementation "com.android.support:multidex:1.0.1"provided("com.tinkerpatch.tinker:tinker-android-anno:1.9.5")compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.2.5")
}
android {defaultConfig {//为热修复添加javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }}
}

三、在app/build.gradle同级目录下新建一个tinkerpatch.gradle文件,用于热修复配置。

apply plugin: 'tinkerpatch-support'/*** TODO: 请按自己的需求修改为适应自己工程的参数*/
//bakPath:基包路径
//baseInfo:基包文件夹名(打补丁包的时候,需要修改)
//variantName:具体文件夹名(存放apk文件)
def bakPath = file("${buildDir}/bakApk/")
def baseInfo = "app-1.0.0-0328-17-53-06"
def variantName = "release"/*** 对于插件各参数的详细解析请参考* http://tinkerpatch.com/Docs/SDK*/
tinkerpatchSupport {/** 可以在debug的时候关闭 tinkerPatch, isRelease() 可以判断BuildType是否为Release **/tinkerEnable = truereflectApplication = true/*** 是否开启加固模式,只能在APK将要进行加固时使用,否则会patch失败。* 如果只在某个渠道使用了加固,可使用多flavors配置**/protectedApp = false/*** 实验功能* 补丁是否支持新增 Activity (新增Activity的exported属性必须为false)**/supportComponent = falseautoBackupApkPath = "${bakPath}"appKey = "应用的appKey"/** 注意: 若发布新的全量包, 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"/*** (可选)重命名备份文件的格式化字符串,默认为'${appName}-${variantName}'* Available vars:* 1. projectName* 2. appName* 3. packageName* 4. buildType* 5. versionName* 6. versionCode* 7. buildTime* 8. fileSHA1* 9. flavorName* 10. variantName* default value: '${appName}-${variantName}'* Note: plz use single-quotation wrapping this format string*/backupFileNameFormat = '${appName}-${variantName}'/***  若有编译多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 = falseuseSign = truedex {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}
}import java.util.regex.Matcher
import java.util.regex.Pattern/*** 如果只想在Release中打开tinker,可以把tinkerEnable赋值为这个函数的return* @return 是否为release*/
def isRelease() {Gradle gradle = getGradle()String  tskReqStr = gradle.getStartParameter().getTaskRequests().toString()Pattern pattern;if (tskReqStr.contains("assemble")) {println tskReqStrpattern = Pattern.compile("assemble(\\w*)(Release|Debug)")} else {pattern = Pattern.compile("generate(\\w*)(Release|Debug)")}Matcher matcher = pattern.matcher(tskReqStr)if (matcher.find()) {String task = matcher.group(0).toLowerCase()println("[BuildType] Current task: " + task)return task.contains("release")} else {println "[BuildType] NO MATCH FOUND"return true;}
}

四、在app/build.gradle中引入tinkerpatch.gradle

//热修复
apply from: 'tinkerpatch.gradle'

五、在app/build.gradle中配置打包的签名文件相关信息

signingConfigs {debug {storeFile file("text.jks")storePassword "123456"keyAlias "text"keyPassword "123456"v2SigningEnabled false}release {storeFile file("text.jks")storePassword "123456"keyAlias "text"keyPassword "123456"v2SigningEnabled false}}

六、在AndroidMainfest.xml中声明必要的权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

七、在Application类中初始化Tinker组件

    /*** 我们需要确保至少对主进程跟patch进程初始化 TinkerPatch*/private void initTinkerPatch() {// 我们可以从这里获得Tinker加载过程的信息tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();// 初始化TinkerPatch SDK, 更多配置可参照API章节中的,初始化SDKTinkerPatch.init(tinkerApplicationLike).reflectPatchLibrary().setPatchRollbackOnScreenOff(true).setPatchRestartOnSrceenOff(true).setFetchPatchIntervalByHours(3);// 每隔3个小时(通过setFetchPatchIntervalByHours设置)去访问后台时候有更新,通过handler实现轮训的效果TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();}

八、正常打包会在app/build/bakApk目录下生成基础包(生成补丁的基础)

基包位置如下图所示,在上线后需要对基包文件夹进行备份,后续生成补丁包需要用到

九、生成补丁包

在Gradle中找到tinkerPatchRelease执行生成补丁包

补丁包位置如下图

十、发布补丁包

添加版本

上传补丁包

至此整个的Tinker热修复从集成到发布补丁的简要过程已经全部完成了,更详细的过程请参考Tinker官方文档

基于Tinker的热修复相关推荐

  1. 《android基于andFix的热修复方案》思路篇

    1:需求背景 项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验 2:方案要求 静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk 3:解决思路 3. ...

  2. android热修复技术tinker,Android热修复方案第一弹——Tinker篇

    背景 一款App的正常开发流程应该是这样的:新版本上线-->用户安装-->发现Bug-->紧急修复-->重新发布新版本-->提示用户安装更新,从表面上看这样的开发流程顺理 ...

  3. Android 浅尝Tinker微信热修复

    现在热修复已经很热门了,比较著名的有阿里巴巴的AndFix.Dexposed,腾讯QQ空间的超级补丁和微信最近开源的Tinker. Tinker是一个android的热修复库,在不重新安装apk的情况 ...

  4. Bugly+Tinker实现热修复

    1.使用环境 Android Studio版本(Bumblebee ):Android Studio Bumblebee | 2021.1.1 Patch 3 Build #AI-211.7628.2 ...

  5. 《android基于andFix的热修复方案》实战篇

    有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies {compile 'com.alipay.eule ...

  6. Android热修复-Tinker简析

    一.简介 日常工作工作中难免会遇到项目上线后出现bug问题,如果紧急发版往往由于渠道审核时间问题,导致bug修复不及时,影响用户体验.这时我们需要引入热修复,免去发版审核烦恼. 热更新优势: 让应用能 ...

  7. 腾讯Tinker 热修复 Andriod studio 3.0 配置和集成(一)

    本文说明 面试的时候经常问我有没有用过热修复?用谁的?能说下原理吗?当时我回答得不好,毕竟以前的项目都没有用,又不敢装逼,mmp,但是基本流程还是知道的,所以我们来初探下Tinker 这个热修复,如果 ...

  8. 【热修复】Andfix源码分析

    转载请标注来源:http://www.cnblogs.com/charles04/p/8471301.html Andfix源码分析 0.目录 背景介绍 源码分析 方案评价 总结与思考 参考文献 1. ...

  9. Android 热修复一(热修复流程原理)

    Android热修复一:热修复的流程 下一篇:Android热修复二(手写热修复代码) 在听了lance老师的热修复理论之后,决定写一篇文章,把我理解的全部记下来 之前也多少了解过热修复,当下的热修复 ...

最新文章

  1. CCS5.5 中报错 Does not match the target type,not loaded 的一种情况
  2. 基于SSM实现保健院管理系统
  3. mysql编程的作用_数据库系统概论对学习编程的作用?
  4. 图数据集之cora数据集介绍 --- 适用于GCN任务
  5. PHP输出控制(Output Control)函数
  6. 鲁大师2014绿色版 v3.75.14.1058 免费版
  7. Uiautomator 2.0之UiObject2类学习小记
  8. NFC读卡MS522|CV520
  9. 强化理解指针、指针数组和数组指针(从三味书屋到成华大道)
  10. postgres 禁止远程登录_Postgresql允许远程访问配置修改
  11. C++之(public/protect/private)及fiend
  12. CS61A fa2021 Composing Programs 2.7 Object Abstraction 对象抽象
  13. k8s使用的iptables,具体原理是什么?一学就会
  14. MATLAB | MATLAB中绘图的奇淫技巧合集
  15. MaxEnt: 最大熵模型(Maximum Entropy Models)
  16. 航空燃气涡轮发动机分类
  17. 厦门之旅(2020.6.15-19)
  18. 阅读书源最新2020在线导入_推荐3款无广告、速度快、可换源的小说利器,5星使用阅读体验...
  19. 一键隐藏公式——《超级处理器》应用
  20. 2022年第五届“传智杯”全国大学生IT技能大赛——程序设计挑战赛

热门文章

  1. 纯js实现鼠标拖尾效果(好玩又简单,一学就会)
  2. excel组合汇总_Excel汇总20160229
  3. 电子狗产品在做宣传时发布图文笔记应该注意些什么?
  4. CodeM 第一题 下单
  5. XSS Challenges/刷题/Stage #3
  6. 记账理财,就选我爱管账
  7. 旅行照片剪辑--苏州同里篇
  8. 「论文翻译」SATIN: A Secure and Trustworthy Asynchronous Introspection on Multi-Core ARM Processors阅读翻译与笔记
  9. 第十八届全国大学智能车竞赛车模作品中的电子模块: 白名单与黑名单
  10. 56 Three.js 使用粒子实现雨滴特效