RxChan 微信热修复-Tinker的简单实现

导言:

好激动,好激动,好激动,第一次写原创博客!~ 感谢鸿洋 Android 热修复 Tinker接入及源码浅析

由于公司项目的模块越来越多,Apk体积也随之增大。随之出现bug的几率也在增加,曾几何时,我也曾为线上几个紧急Bug而神伤(拒绝秃头).更替版本吧,损失太大了,不跟新吧线上又有问题存在.,把时间花在频繁打包,发包,简直是浪费生命,所以决定研究一下热修复。本片文章主要是简单介绍下如何运行官方SampleDemo 

现在热修复主要有 阿里爸爸的AndFix、HotFix(说好的今年1月份出来HotFix2.0呢),Qzone补丁方案,还有前几天开源的美团的Robust(GitHub上的issues都没动静了,说多都是泪(┬_┬),),还有今天要讲的微信热修复方案Tinker。

Tinker是什么

在Data里面这个Tinker可厉害了,既可以中单,又可以带线。想当年8分钟裸飞鞋。呃。好像跑偏了。。。对于技术我们是认真的,下面开梭拉。

Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。

RxChan 微信热修复-Tinker的简单实现_第1张图片
图1 热修复的基本原理

基本原理的就是两个不同.dex经过dex diff算法进行比较生成dex patch,在应用中对patch的合并生成新的classes.dex

RxChan 微信热修复-Tinker的简单实现_第2张图片
图2 各平台的热修复方案差异

Tinker在上亿Android设备中运行,所以毋庸置疑,肯定是个很优秀的热修复方案!

Tinker运行

Tinker接入

我们先在GitHub把官方代码loader下来:下载地址 https://github.com/Tencent/tinker

RxChan 微信热修复-Tinker的简单实现_第3张图片
图3 导入sample demo

只要打开tinker-master包中tinker-sample-android 这个project

首先要修改gradle里面的一些基本配置,否则项目是无法跑起来的,

在app的build.gradle文件中找到tinkerId = getTinkerIdValue()并将其替换成tinkerId = "tinkerId",这个字段值可以随意填写(图4)

RxChan 微信热修复-Tinker的简单实现_第4张图片
图4

再替换ignoreWarning = false 为 ignoreWarning = true.

RxChan 微信热修复-Tinker的简单实现_第5张图片
图5 

生成原始Apk

双击执行  Gradle->tinker-sample-android->Tasks->build->assembleDebug 生成原始Apk

RxChan 微信热修复-Tinker的简单实现_第6张图片
图6 执行Gradle
RxChan 微信热修复-Tinker的简单实现_第7张图片
图7 原始Apk路径

这时候这里就有一个原始的Apk

生成patch

手机安装好这个Apk后,我们开始进行生成patch

先修改原先的代码

RxChan 微信热修复-Tinker的简单实现_第8张图片
图8 

再来试试Resource Change

RxChan 微信热修复-Tinker的简单实现_第9张图片
图9

修改Res 中 value/string.xml 中的值

RxChan 微信热修复-Tinker的简单实现_第10张图片
图10 value/string.xml

再来试试修改TextView的值

RxChan 微信热修复-Tinker的简单实现_第11张图片
图11

修改build.gradle文件中的配置,指定要进行dex.diff算法比对的原始apk;

RxChan 微信热修复-Tinker的简单实现_第12张图片
图12 修改 app: build.gradle

OK,双击执行  Gradle->tinker-sample-android->:app->tinker->tinkerPatchDebug  开始生成patch

RxChan 微信热修复-Tinker的简单实现_第13张图片
图13 tinkerPatchDebug

运行原始Apk

将输出的patch_signed_7zip.apk拷贝到 手机中sd卡中

RxChan 微信热修复-Tinker的简单实现_第14张图片
图14 patch路径

拷贝patch到手机,这里和MainActivity 路径是一致的

RxChan 微信热修复-Tinker的简单实现_第15张图片
图15 patch放置手机路径
RxChan 微信热修复-Tinker的简单实现_第16张图片
图16 加载patch的指定路径

合并Patch

打开之前安装的原始app,点击load patch。

原始App的日志打印

图 17 原始App的日志打印
RxChan 微信热修复-Tinker的简单实现_第17张图片
图18 执行

合并patch成功

RxChan 微信热修复-Tinker的简单实现_第18张图片
图19 patch合并成功log

点击kill self关闭app,再次打开app

RxChan 微信热修复-Tinker的简单实现_第19张图片
图20 成功修改TextView

TextView 修改成功了,再看看日志打印有没有修改成功

图21 成功修改代码

也成功了。小伙伴看到这里是不是很(。・∀・)ノ゙ 嗨心呢

完~

第一次写博客,难免会有些纰漏,欢迎指正,抛砖引玉啦

WeChat:1012299077  

Email:[email protected]  

本文主要先让没接触过Tinker的小伙伴们对Tinker有个初步的认识,我将在下次给小伙伴们带来实战项目的接入和使用。

周末买了束花,心情好好,小伙伴们周末愉快!~

RxChan 微信热修复-Tinker的简单实现_第20张图片

你可能感兴趣的:(RxChan 微信热修复-Tinker的简单实现)