Android热更新(Tinker与walle结合使用)

最近项目上线,终于可以清闲一小段时间,但是为了提升技术总得给自己找点乐子干。(⊙v⊙)嗯,提升App逼格加个热更新吧!
项目中原来是区分渠道标示打包的,加入热更新是否要打多个补丁包? 一开始先研究Tinker,其原理我想懂行的人都清楚,无非就是应用了类加载方案,如果想使用热更新强烈推荐Tinker接入指南。
Tinker的使用方式如下,以gradle接入的release包为例:

  1. 每次编译或发包将安装包与mapping文件备份;
  2. 若有补丁包的需要,按自身需要修改你的代码、库文件等;
  3. 将备份的基准安装包与mapping文件输入到tinkerPatch的配置中;
  4. 运行tinkerPatchRelease,即可自动编译最新的安装包,并与输入基准包作差异,得到最终的补丁包。
使用过程中可能遇到打补丁包失败问题,通过追根溯源修改了以下两处:
1.忘记添加混淆代码
Android热更新(Tinker与walle结合使用)
文章图片

2.忘记 loader中类必须放入主dex中
Android热更新(Tinker与walle结合使用)
文章图片

通过Tinker首先我们打出基础包,注意保留基础包,然后我们开始多渠道打包。

美团带来的 新一代开源Android渠道包生成工具Walle
  • 至于为什么选择Walle,我给大家看一张截图,如下:
    Android热更新(Tinker与walle结合使用)
    文章图片

接入Walle后我们生成渠道包,直接在Android Studio 下面的Terminal 窗口敲入如下命令,回车:
./gradlew clean assembleReleaseChannels
Android热更新(Tinker与walle结合使用)
文章图片


接下来我们使用Tinker热修复各个渠道包 步骤一:修改基础包配置
通过上面步骤生成各个渠道包的同时,在build文件夹下,Tinker同样会给我们打出基础包,相信细心的读者在上一张截图里就会发现,bakApk文件夹里即是基础包相关的文件,同样,我们需要将这文件夹里的三个文件的名称填写到 app 的 build.gradle 类的 ext 这里,sync一下,(这里生成的基础安装包和 R文件以及release版本的mapping文件一定要自己保存好,因为每次打补丁包都需要用到这些文件作为基础文件,别弄丢了),如下图:
Android热更新(Tinker与walle结合使用)
文章图片

build.gradle
步骤二:修复bug
修改项目的bug,demo这里只是增加一个textview控件作为热修复测试,如下图:

Android热更新(Tinker与walle结合使用)
文章图片

修复bug测试
【Android热更新(Tinker与walle结合使用)】步骤三:打补丁包
1.点开 Android Studio的Gradle 界面,如下,双击 tinkerPatchRelease ,如下:
Android热更新(Tinker与walle结合使用)
文章图片

Gradle Tinker
2.紧接着,Tinker 在build 文件夹下的 outputs 文件夹里面会生成我们需要的补丁文件,patch_signed_7zip.apk 就是我们所要的补丁包,如下:
Android热更新(Tinker与walle结合使用)
文章图片

patch_signed_7zip.apk
当然,如果你想了解更多关于输出文件的情况,可以点开Tinker Wiki 的 输出文件详解。
步骤四:将补丁包拷贝到手机sdcard中测试
将步骤三生成的 tinkerPatch 文件夹下面的 patch_signed_7zip.apk 文件,拷贝出来,改成你的 MainActivity中加载的文件名字,demo这里叫TinkerPatch,将其拷贝到手机的sdcard中的myTinkerDemo 文件夹下,没有这个文件夹你就自己手动新建一个,下图带你回顾一下 MainActivity 的设置:
注意此处,测试和发布版本的不同:发布版本的补丁文件一般是通过网络下载下来,存放到sdcard中,再加载。
Android热更新(Tinker与walle结合使用)
文章图片

MainActivity
步骤五:加载补丁
点击主页的加载补丁按钮,没加载之前如下界面,里面显示了当前app的渠道信息:

Android热更新(Tinker与walle结合使用)
文章图片

发现新bug
点击加载补丁之后,锁屏或者杀死进程,再次进入demo,补丁已经加载出来,在渠道信息下面增加了一个文本,标识新bug已修复。如下:

Android热更新(Tinker与walle结合使用)
文章图片

新bug已修复
小结,经过一天的折腾终于搞出来了,激动,哈哈哈哈哈,感觉逼格都提升了一个档次。我们只需要打一个补丁包出来,就可以热修复所有应用渠道上面的bug。
切记:你所有的努力只为遇到更好的自己!

    推荐阅读