tinker apk版本号,tinkerId,tinkerVersion理解

在跑通了demo以后相信大家玩熟练以后差不多能接入自己的项目了。但是似乎很多兄弟不太能分清楚apk版本号,tinkerId,tinkerVersion之间的关系,这里来说说自己的心得。

    问题描述:不同用户的手机上安装的apk版本不同,补丁包的版本不同,如何准确的发放补丁包,针对性的修复。

应用场景:用户手机安装了 版本号为1.0的apk,该apk在打包的时候设置的tinkerId是tinker1.0。这些都是已经安装安装在用户手机上的相关信息了。

接下来我们要为1.0版本做补丁包。这里我们要用 版本号为1.0的apk文件 作为打补丁的基准文件,并且tinkerId应保持不变(tinkerId tinker1.0);如果你要给同一个版本多次打包,最好给tinker设置一个版本号tinkerVersion,这里第一个补丁包设置tinkerVersion=1.0;

一切都跟跑demo一样轻松。

场景1:在已经打过补丁的版本上再次打补丁。用户手机上现在安装apk版本1.0,tinkerId:tinker1.0,补丁一个tinkerVersion:1.0;

我们发现第一次的补丁包没有修复所有的问题,需要再打一个补丁包。过程:我们要用 版本号为1.0的apk文件 作为打补丁的基准文件,并且tinkerId应保持不变(tinkerId tinker1.0);这里是第二个补丁包,设置tinkerVersion=1.1;

问题:如果用户没有打上1.0的补丁包,可以直接打上1.1的补丁吗?如果用户已经打上了1.0的补丁,再打1.1的补丁会对1.0有影响吗?
解释:tinker的补丁包实际上是修改过后的apk文件与基准apk文件之间的差异包。所以补丁的版本号对打包没有影响。所以这里就体现了设置tinkerVersion的重要性。如果服务器同时给出了1.0和1.1的版本的补丁可供用户下载,但是我们希望的是用户使用更高版本的补丁,所以代码里面需要做出版本号的判断,来确定是否要加载补丁。

场景2:apk版本更新,老版本上有补丁,新版本也要打补丁了。一部分用户手机上安装这1.0版本的apk,且1.0版本apk打过补丁,tinkerId:tinker1.0,另一部分用户安装的2.0版本的apk,现在需要给2.0apk打补丁。

这里我们要给2.0版本apk打补丁,所以要拿2.0的apk作为基准文件,并且修改tinkerId tinkerId:tinker2.0;tinkerVersion = 2.0;

    这里修改了tinkerId是为了不影响1.0版本。

你可能感兴趣的:(学习记录)