微信热修复Tinker使用

Tinker是微信前段时间开源的Android热补丁方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。
同时,还有许多其他公司使用的热补丁方案,如比如QZone,AndFix,Dexposed等等;网上有许多他们之间的比较文章,大家可以参考后选择适合自己的。本文就简单介绍下Tinker的使用。

添加依赖

这一步很简单,照着 github接入指南 上做就好了。

  • 首先在项目的build.gradle中添加 tinker-patch-gradle-plugin 依赖

buildscript {
dependencies {
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.1')
}
}

* 然后在app的**gradle**文件 **app/build.gradle**添加tinker的库依赖以及apply tinker的gradle插件.
>```
  dependencies {
        //可选,用于生成application类  
        compile('com.tencent.tinker:tinker-android-anno:1.7.1') 
        //tinker的核心库 
        compile('com.tencent.tinker:tinker-android-lib:1.7.1')
   }
  ...
  ...
  //apply tinker插件
  apply plugin: 'com.tencent.tinker.patch'
  • 在app/builde.gradle文件的dependencies外面添加一些配置 :

tinkerPatch {
//有问题的apk的地址
oldApk = "F://app_bug.apk"
ignoreWarning = false
useSign = true
buildConfig{
tinkerId = "1.0"
}
packageConfig{
configField("TINKER_ID", "1.0")
}
dex{
dexMode = "jar"
pattern = ["classes.dex", "assets/secondary-dex-?.jar"]
loader = ["com.tencent.tinker.loader.
", "com.tinkertest.Application"]
}
lib{
pattern = ["lib/armeabi/.so","lib/arm64-v8a/.so","lib/armeabi-v7a/.so","lib/mips/.so","lib/mips64/.so","lib/x86/.so","lib/x86_64/.so"]
}
res{
pattern = ["res/
", "assets/*", "resources.arsc", "AndroidManifest.xml"]
largeModSize = 100
}
sevenZip{
zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
}


##### 自定义Application类
1.写一个SimpleAppLike类继承自DefaultApplicationLike,并添加注解。使用注解生成application类*demo.com.tinkerdemo.SimpleApp*,并将其添加到manifest中
>  ![1111.png](http://upload-images.jianshu.io/upload_images/2124523-64f85d7c500447d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


2.重写SimpleAppLike里面的*onBaseContextAttached(Context base)*方法,并添加*registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks  callback)*方法。
> ```
@Override
public void onBaseContextAttached(Context base) { 
   super.onBaseContextAttached(base); 
   MultiDex.install(base);    
   TinkerInstaller.install(this);
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
    getApplication().registerActivityLifecycleCallbacks(callback);
}

3.在SimpleAppLike中实现你Application 类需要实现的内容。

简单使用

1.先将你的app运行到手机上,并复制一份到第一步中的oldApk目录
2.修改app的代码,例如修改文字,Toast等,在实际中即修复bug。
2.在android-studio右边点开gradle窗口,选择tinkerPatchDebug,并运行生成补丁包

222.png

3.在app->build->outputs->tinkerPatch目录下选择patch_signed_7zip.apk;并拷到指定手机目录(指定的运行目录,见步骤5)
333.png

4.在app中执行更新,退出后再进入app,就能看到修改后的效果。
5.图中path为指定目录,在执行TinkerInstaller.onReceiverUpgradePatch()修复时需要传入的path即为存放生成的补丁包的位置。

123.png

结语

以上介绍了Tinker的使用方法,作者是个菜鸟,难免有讲的不好的地方,请见谅。
示例Demo

这是Tinker的项目地址,也有很好的讲解,可以深入学习。

官方demo:tinker-sample-android 
注:官方demo 需要作为project单独打开

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 1.热修复: 热修复从原理上说应该是属于插件化的一类,我们可以用热修复来处理线上紧急的bug,而不需要提示用户重新...
    茴香豆的第五种写法阅读 1,376评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,401评论 25 707
  • Tinker使用 前言 写在前面的话,在上家公司一直在主导组件框架的开发,所以对Android领域组件化,热更新的...
    徐正峰阅读 1,869评论 6 6
  • 前言 热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力。B...
    Smile__EveryDay阅读 24,820评论 31 19
  • 中国传统图案指的是由历代沿传下来的具有独特民族艺术风格的图案。中国传统图案源于原始社会的彩陶图案,已有6000~7...
    艺伙阅读 1,220评论 0 6