最近项目需要,开始加入热更新的功能。经过网上资料的对比,最终选择用腾讯的tinker。
看了官方文档,还是比较简单的,于是把demo clone下来,一步步按文档完成所有步骤。
按照下图双击assembleRelease打包基线版本,然后修改bug、修改基准包目录、修改tinker_id
双击buidTinkerPatchRelease生成补丁包
一切搞定后到bugly后台上传补丁包,这个时候问题来了
在网上看了一下可能原因
1、tinker-support.gradle 配置上少了tinkerEnable =true,加上,但是我的问题不在这里,依然没解决。
2、基准包目录不对应。我检查了一遍在我这里也是没有问题。
3、tinker_id 没有修改。我重试了很多遍,也不是我这里的原因。
4、初始化市APPID没改成自己的。我也检查了是自己的APPID。
5、基线包装手机上启动一遍,上报联网数据。这个动作自己也有操作。
那么到底是什么原因呢?卡住了很久,但自己基本上确定是tinker_id不匹配的原因。于是再看一遍文档。
问题发现:看到了热更新详解上的一个重点,基准包启动上报联网数据有打印信息的,于是连上手机启动apk
发现base tinkerId:[] 空的。。。。。。。。。
这个头疼了,问题确定但是不知道什么原因造成的,只能和文档一个个对比去排查。
发现application上tinker安装代码上有点差别,看一下截图
文档上的installTinker();无参数的
Demo上的installTinker(this);有参数的
而自己的就是按照Demo上写的带参,我尝试去掉从新打包安装到手机再看LOG打印,竟然tinkerId有数据了。
这个到底是因为什么,我也不知道是为什么。只是笨拙的试错。最终下发成功!