本文主要讲tinker官方Demo的接入使用,没有用到tinkerPatch补丁后台管理系统。
1.从git上面下载tinker的官方demo下来,里面的东西不深究,就直接从他的tinker-sample-android这个demo 开始
2.将其导入as中,一般直接导入进来是无法运行的,他会报错,这是个什么错呢,啥玩意又是tinkerid呢,从上面的wiki里面可以看出这些参数的意思,如果对build.gradle里面那些配置参数不懂的都可以在上面的wiki中寻找到,这个tinkerID我的理解就是加密和解密一样的匹配关系,验证基准apk包的时候判断是不是补丁包的tinkerid一样
3.这个tinkerid 可以用git版本号,也可以用versionname来定义,这个demo里面他用的是他的git 版本号,所以直接拿来我们跑肯定是有问题的,我们需要手动修改下这个(如果你有配git的话可以用git版本好来定义,如果没有的话就用versionname一样,反正最终都是用一个字符串来表示),如果修改build.gradle里面的 def gitSha()方法 我用的是git的版本号
命令行敲命令:git --version ,获取版本号
两种方式设置tinkerID均可,最终都是用一个字符串来表示,如下图所示:
4,我们在gradle里面运行assembleDebug(双击执行)生成一个apk文件 我们先将这个apk安装到手机上;
5,上一步生成apk包后,在这个 目录复制.apk的名字和.txt文件的名字,进入build.gradle里面将tinkerOldApkpath和tinkerapplyResourcePath的路径替换成刚才你复制的,这样就等于指定了后期更新的包 是要替换掉这个前期的包。
6,紧接着对项目进行任意修改(价格按钮,改下图片啥的),模拟对项目进行了bug修复,最后就要发补丁版本了(第4步的是base版本,这一步生成补丁版本)
我们在gradle里面运行gradle里面tinker目录下的tinkerpatchdebug(双击执行):
7,将这个生成的pathc_signed_7zip.apk这个补丁包放入我们内存卡的根目录中,可以直接将这个apk放入我们的根目录,也可以执行:adb push apk包全路径 /storage/sdcard0/
命令来将我们的补丁包放入sd卡根目录。
8,点击我们一开始安装的app ,点击LOAD PATCH加载我们的补丁包,再点击kill self或者彻底退出应用,再重新进入,补丁即生效!至此热修复结束
总结: 一开始我也研究了挺久 ,实际项目使用的热修复跟官方的demo还是有很大的差别的,因为我不想使用tinkerPatch补丁后台管理系统,可以直接这样做:在应用入口Application类,或MainActivity中,加一个检查更新补丁的功能,若服务端有最新的包,则下载下来并保存到sdcard,在让应用加载补丁包即可实现热修复功能。
检查更新推荐UpdateAppUtils,一行代码快速实现app版本更新(https://github.com/teprinciple/UpdateAppUtils)