集成bugly热更新(tinker)的一些问题

1,472 阅读2分钟

bug1: loader classes are found in old secondary dex

实际开发过程中,大部分应用都会遇到64k限制的问题,解决方案也很简单,就是使用MultiDex,MultiDex会分成几个小的dex,于是这个问题就出现了。 看到网上的解决方案总结为两种:

  1. minSdkVersion 设置小于21,然后加入google的mulityDex方案。
  2. 在tinkerSupport中开启这两个命令allowLoaderInAnyDex = true removeLoaderForAllDex = true

bug2: No such property: variant for class: com.tencent.tinker.build.gradle.TinkerPatchPlugin

这个问题其实是因为当前的Tinker版本,不支持Gradle过高的插件版本。 经测试版本gradle:3.6.0 以上出现的问题,目前考虑可以降级到3.5或者3.4。(我的tinker版本:tinker-android-lib:1.9.14.7)

bug3: unexpected element <queries> found in <manifest>

Android 11作为清单元素引入,而旧版本的Android Gradle插件不知道该元素。Google发布了一系列的Android Gradle插件补丁版本来解决此问题:

老版本对应版本
3.3.x3.3.3
3.4.x3.4.3
3.5.x3.5.4
5.6.x3.6.4
4.0.x4.0.1
4.1.x不需要升级

bug4: Invalid Gradle JDK configuration found. Open Gradle Settings

这个问题,原来在github上下代码经常碰到,清一下studio的缓存,重新打开就好了。但是这次没有 = =。

于是我发现问题没有那么简单。又是一通操作,最后发现需要升级java11。我的studio版本是4.2.1,但是我问我的同事,同样的studio版本,他们就没有遇到这个问题,所以只是提供一个思路,我的这个问题,确实是升级了jdk到11好的。emmmm


最后在记录一下tinker需要注意的一些问题


- 修复的补丁是覆盖的

  比如A+补丁B,会换成A+补丁C,而不是A+B+C

- 每次发版都要保留基准包、混淆配置文件、资源Id文件

- bugly补丁下发是按照tinkerid下发。 多个基准包使用了同一个tinkerid那说明这几个基准包都能收到你当前上传的补丁。

- Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件(1.9.0支持新增非export的Activity);

- 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;

- 在Android N上,补丁对应用启动时间有轻微的影响;

- 不支持部分三星android-21机型,加载补丁时会主动抛出`"TinkerRuntimeException:checkDexInstall failed"`- 对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。