微信热修复tinker及tinker server快速接入
博客: 安卓之家
掘金: jp1017
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917
当前热修复方案很多,今天研究了下微信的tinker,使用效果还是不错的,配合tinker server服用更佳。下面介绍两者的使用,以便大家快速接入。
tinker 接入指南
安装tinker gradle插件
1 在项目的build.gradle中, 添加tinker-patch-gradle-plugin的依赖
buildscript {dependencies {classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.5')}
}
2 然后在app的gradle文件app/build.gradle,我们需要添加tinker的库依赖以及apply tinker的gradle插件.
//apply tinker插件
apply plugin: ‘com.tencent.tinker.patch’
dependencies {//可选,用于生成application类provided('com.tencent.tinker:tinker-android-anno:1.7.5')//tinker的核心库compile('com.tencent.tinker:tinker-android-lib:1.7.5')
}
配置tinker task
配置基础包, tinkerid, dexMode等,详见gradle配置: tinker task 配置
我做了如下修改:
1 修改tinkerid为版本号, 跳过了需要commit一次的坑:smile:
def getTinkerIdValue() {//版本作为idreturn android.defaultConfig.versionName
}
2 移动备份文件到/tinker/bakApk/下, 防止clean掉基础包文件
3 重命名备份文件, 比如base-app-debug-v1.0.1-2016-1125.apk
, 当然自动生成的是app-debug-v1.0.1-2016-1125.apk
, 需要手动添加前缀作为基础包, 后面多次编译不会把基础包覆盖掉, 也不会像官方demo里那样以秒命名产生很多文件…
4 修改tinker message 为 I am the patch apk-v版本号
5 修改patchVersion为版本号, 这个在tinker server需要
-configField("patchVersion", "1.0.7")
+configField("patchVersion", android.defaultConfig.versionName)
注意 里面有些修改的地方, 包名修改为你的包名等, 我用todo做了标记
生成 Application
如果你有Application类, 那么需要自定义一个DefaultApplicationLike, 让tinker帮你生成Application
正如项目里的public class SampleApplicationLike extends DefaultApplicationLike {
并对类添加注解, 比如添加如下注解:
@DefaultLifeCycle(
application = "tinker.sample.android.app.SampleApplication", //application name to generate
flags = ShareConstants.TINKER_ENABLE_ALL)
编译后, 会生成一个SampleApplication, 用这个作为你的Application, 写入清单文件
好了, tinker到这里就配置好了, 下面开始打补丁
打补丁包
1 命令行
打debug补丁: ./gradlew tinkerPatchDebug
打release补丁: ./gradlew tinkerReleaseDebug
这里需要注意, 命令在linux和mac下最好是./gradlew
, 意思是当前项目的gradlew, 如果写成gradlew
可以会去下载gradle等, 因为那是全局的, 比如AS2.2.2带的版本是2.14.1
而我现在的是最新版本3.2.1, 可输入./gradlew -v
和 gradlew -v
查看
而windows就可以是gradlew
注意 debug和release配置的基包不同, 和他们一一对应, 另外, release还需要配置mapping文件.
2 双击对应task
就是去gradle projects里找到对应task, 双击执行就可以, 如下图:
比如, 打debug补丁, 双击tinkerPatchDebug
就可以了
下一次打补丁时就可以从快捷栏选择,然后点击右侧运行, 如下图:
安装及卸载补丁
加载补丁
第二个参数是补丁包存放路径, 名称任意, 可以不以 .bak
结尾
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), patchPath);
还可以自定义加载成功等交互, 请参考 SampleResultService
, 别忘记添加进清单
清除补丁
当补丁出现异常或者某些情况,我们可能希望清空全部补丁,调用方法为:
Tinker.with(context).cleanPatch();
当然我们也可以选择卸载某个版本的补丁文件:
Tinker.with(context).cleanPatchByVersion();
在升级版本时我们也无须手动去清除补丁,框架已经为我们做了这件事情。需要注意的是,在补丁已经加载的前提下清除补丁,可能会引起crash。这个时候更好重启一下所有的进程。
查看补丁是否加载
boolean isPatched = tinker.isTinkerLoaded();
tinker server 接入及使用
tinker server 提供tinker补丁包下发及监控等, 使用也是很简单
gradle 配置环境
1 gradle远程仓库依赖jcenter
repositories {jcenter()
}
2 再添加sdk库的dependencies依赖:
dependencies {compile("com.tencent.tinker:tinker-server-android:0.3.0")
}
3 在 TinkerPatch 平台中得到的 AppKey 以及 AppVersion,将他们写入 buildConfig 中:
比如:
buildConfigField "String", "APP_KEY", "\"f938475486f91936\""
buildConfigField "String", "APP_VERSION", "\"3.0.0\""
平台链接: tinkerpatch.com
新增app后可以得到AppKey, 至于AppVersion, 就是补丁的版本, 我这里都是版本号, 可以参考这个issue: 关于AppVersion问题
4 清单配置网络及sd卡读写权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
代码初始化
TinkerServerManager.installTinkerServer(getApplication(), Tinker.with(getApplication()), 3);
后面的3表示每隔3小时请求一次服务器, 检查是否有更新包
请求更新补丁
1 主动请求更新
TinkerServerManager.checkTinkerUpdate(true);
2 获取新增参数
TinkerServerManager.getDynamicConfig(new ConfigRequestCallback() {…
下面来一个该demo的tinker server 截图:
参考
更多使用及问题请参考官方文档:
Tinker – 微信Android热补丁方案
Tinker 接入指南
Tinker API概览
Tinker 自定义扩展
Tinker 常见问题
Tinker Platform 平台使用文档
代码就是Tinker官方示例,我做了一些修改,可点击这里查看: https://github.com/jp1017/tinker-sample-android
最后,非常感谢您的阅读,有任何疑问,可以后面评论,谢谢!
神奇的安卓开发网站:http://androidcat.com/
安卓开源库收集整理:https://github.com/XXApple/AndroidLibs
分享是一种美德,更是一种生活方式!!
也许你会说我是一个梦想者,但我不是唯一的一个。
悦分享,越快乐^_^
欢迎交流,转载请注明出处,谢谢!
微信热修复tinker及tinker server快速接入相关推荐
- Android 框架学习5:微信热修复框架 Tinker 从使用到 patch 加载、生成、合成原理分析
这篇文章是基于内部分享的逐字稿内容整理的,现在比较喜欢写逐字稿,方便整理成文章. 文章目录 目录 Tinker 介绍 使用 TinkerApplicaition ``SampleApplicaitio ...
- Android 浅尝Tinker微信热修复
现在热修复已经很热门了,比较著名的有阿里巴巴的AndFix.Dexposed,腾讯QQ空间的超级补丁和微信最近开源的Tinker. Tinker是一个android的热修复库,在不重新安装apk的情况 ...
- Android 微信热修复 Tinker 接入过程及使用方法
一.前言 学习热修复 Tinker 的使用,主要有两个原因: 业务需要:项目会出现一些细小的bug,需要等到发布新版才能修复,因此一直有关注热修复这块的技术. 技术驱动:这是一件需要一直保持的事情,不 ...
- 微信热修复 Tinker 和 flavor 更新
好久都没有写博客了,最近看了看关于热更新的内容.主要有阿里的,腾讯的,而实验的则是使用的是微信的热修复 Tinker ,以及在使用了 flavor 后的 热修复. 本文的内容是基于 AS3.0.1,注 ...
- 【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )
文章目录 一.下载官方示例源码 二.处理 TINKER_ID 问题 三.编译 debug 包 四.安装 APK 并运行 五.修改 Gradle 构建脚本中的文件名称 六.修改程序逻辑代码 七.生成 p ...
- 微信热修复-同事写好后拉下来代码就报错了
同事写的功能,在他的mac电脑上就是好的,但是我拉下来代码就不行了,做开始报的错的是jvm内存的问题,然后就内存大小,改大了崩溃,改小了报错,然后就围绕着内存展开了一系列的研究 Unable to s ...
- 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录
2019独角兽企业重金招聘Python工程师标准>>> 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录 来源:微信技术团队的公众号WeMobileDev 热 ...
- 手把手教你使用Tinker Platform进行热修复补丁管理
使用Tinker Platform进行热修复补丁管理 这是手把手教你使用腾讯的热修复框架-Tinker的姊妹篇,它主要讲述了如何接入Tinker以及Tinker的基本使用,不熟悉的可以点击了解一下. ...
- 【腾讯Bugly干货分享】微信热补丁Tinker的实践演进之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ad7a70eaed47bb2699e68e Dev Club 是一个交流移动 ...
最新文章
- 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战 PDF
- Spring Cloud Sidecar –节点初始化
- 【Java】基于栈的括号匹配问题
- 【转】盖茨给职场新人的10句话
- RTT的IPC机制篇——邮箱
- 股价暴跌 特斯拉市值周四蒸发上千亿美元
- oracle clob 粘贴,使用Oracle SQL Developer将CLOB导出到文本文件
- winform 添加listview数据
- 将adb命令打包成脚本
- android图标包怎么安装,图标包怎么用 安卓好看的图标包推荐
- Mysql数据库——高阶语句(上)
- OJ期末刷题 问题 B: 求三角形面积-gyy
- staring mysql_mysql启动错误:Starting MySQL.. ERROR! The server quit without updating PID file错误...
- 关于华为应用市场的上架流程
- 静态html无法进行post请求,静态页接收post请求
- 知识图谱——TransH模型原理
- win7 64位虚拟机安装
- tiktok海外抖音发视频0播放怎么办?
- 怎么给Mongodb设置账号密码(跳坑版)
- 我的世界优化服务器ip,我的世界1.9.4服务器ip
热门文章
- 关于玩只狼时,解决 游戏画面只在屏幕左上角四分之一显示 的问题 !!!!
- QT 设置QPushButton背景为透明色
- 三国杀开源系列之二105@365
- 2.1 法学的历史(一):西方法学的历史
- 《正面管教》思维导图图解,找对教育孩子好方法
- win10共享打印机怎么设置_win10、win7与XP如何共享文件和打印机(下)
- 云服务器常见的十个问题
- SAP MM 因物料有负库存导致MMPV开账期失败问题之对策
- NVL和COALESCE的区别
- 计算机科学与技术脑电波,科学“读心术”,当脑电波扫描图遇到人工智能