笔者一开始想要接入热更新的时候,在网上找资料找了半天,资料很多,但是大部分写的还是不够详细,官网上介绍的也比较省略。笔者尝试了多次以后,才终于做成功了。下面就开始详细介绍tinker集成的过程。
先简单介绍一下tinker,官网上给的解释是:“Tinker 是一个开源项目,它是微信官方的 Android 热补丁解决方案,它支持动态下发代码、So 库以及资源,让应用能够在不需要重新安装的情况下实现更新。”。官网网址http://www.tinkerpatch.com/Docs/intro
也就是说,它是通过生成补丁包的方式实现在线的实时更新的,补丁包储存了改动过的代码部分,这里的改动是相对于基准包来说的。基准包,类似于标准包,所有的补丁生成都要基于这个最开始的版本。也就是app的版本,这里最好对应apk的build文件的versionName的值。也是为了方便标记。
下面开始准备步骤。
1.首先要到tinkerPatch平台申请一个账号,该平台是用来管理生成的补丁包的。操作流程参照http://www.tinkerpatch.com/Docs/start。过程很详细。新建一个app的时候,会生成appkey,项目里会用到。
2.打开android studio,新建一个项目。笔者用的开发工具版本是3.4.1。
在根目录build文件,dependencies{}代码块里增加一行代码:classpath("com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.2.13") { changing =true },如图
然后在app的build文件新加入一行依赖:implementation("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.2.8"),不要低于1.2.8,否则合并会出现各种问题。versionName随意填写,这里的是1.0.2。加入签名配置。
读者可能已经注意到,build文件引入了另一个tinkerpatch.gradle文件。
3.1.新建tinkerpatch.gradle文件。这里我们需要官网提供的demo,打开网页https://github.com/TinkerPatch,如图,
选择第2个,下载到本地。打开。demo里面也有一个现成的tinkerpatch.gradle文件,将里面的所有内容都拷贝到你自己的项目里。
tinkerpatch.gradle文件里面的参数配置,都是键值对的形式。只有几点需要注意。
baseInfo,基准包的文件名称。
varientName,这里改成release。
tinkerEnable,是否支持补丁生成,这里是true。
appKey,操作上面第一步获取得到的。
appVersion,和主项目的versionName保持一致,都是1.0.2。
除了以上提到的参数需要改动的,其他的都使用的默认就好了。每一个参数的意思和用处,源代码里面也都有详细的注释。这里就不再多做介绍。
3.2
自定义application类。新建SampleApplication,继承Application。参照demo里面的写法。最主要的方法如下
方法使用了建造者模式,可以设置轮询时间等条件。
4
以上的三个步骤都是准备工作。下面就开始生成补丁包。首先,生成一个基准包。这里指的就是正式包。
运行assembleRelease。编译完成后。在app的build文件下会生成bakApk文件,因为下一步要执行clean操作,为防止被清空,所以先将这整个文件转移到project目录下。
执行clean项目的操作。完成后,将bakApk再重新转移到原先的build目录下。同时将该文件目录下的app-release.apk也安装到手机上。文件目录结构如图。
然后修改tinkerpatch.gradle的baseInfo参数,改成图中的文件名,即“app-1.0.2-0801-10-19-42”。下一步,我们需要在我们的代码里面做一些修改,比如改变首页的文字什么的,这里建议读者改动的地方最好是能直接看到的地方。改好后,我们还需要在tinkerPatch平台对应的项目下新增一个app版本。版本号和这里保持一致都是1.0.2。
然后,运行 任务tinkerPatchRelease 。编译完成后,在output文件下就可以看到生成的补丁文件了。通常会有两个,建议选择7zip.apk结尾的补丁,因为体积会小一点。如图
5.最后,打开tinkerPatch管理平台,在对应的项目对应的版本下发布刚刚生成的补丁。发布方式选择全量下发。发布成功之后,打开手机,打开在第4步安装好的app,测试代码有没有自动更新。通常情况下,在app进程被清掉的情况下再重新打开app才会看到生效。这里说通常,是因为生效并不总是能立即生效,可能需要再重复app进程重启的过程。
如果需要立即看到生效的,那么要在手机上再下载安装一个调试apk,官网提供了下载链接操作http://www.tinkerpatch.com/Docs/dev,在“调试工具”下面提供了下载链接。同时我们补丁的发布方式要改成开发预览模式,如下
这样操作完成后,手机上打开调试工具apk,开启模式选择,重新打开我们的app进程之后,就可以看到更新的部分已经生效。
到这里,tinker热更新的全部步骤已经都介绍完毕。
另外,还有一点需要明白,那就是tinkerpatch里的appVersion值什么时候改变的问题。除非你新增了一个全新的基准包,appVersion的值才会变,比如从1.0.2变到了1.0.3。相应的在tinkerPatch平台也要新增一个app版本,版本号为1.0.3。之后添加的文件都是基于该基准包所生成的补丁。