什么类需要放在主dex中?

Tinker并不干涉你分包与多dex的加载逻辑,但是你需要确保以下几点:

  • com.tencent.tinker.loader.*类,你的Application类需要在主dex,并且已经在dex.loader中配置;
  • 若你自定义了TinkerLoader类,你需要将TinkerLoader的自定义类,以及它用的到类也放在主dex,并且已经在dex.loader中配置;
  • ApplicationLike的继承类也需要放在主dex中,但是它无须在dex.loader中配置,因为它是可以使用Tinker修改的类。最后如果你需要在加载其他dex之前加载Tinker的管理类,你也可以将com.tencent.tinker.*都加入到主dex
  • 你的ApplicationLike实现类的直接引用类以及在调用Multidex install之前加载的类也都需要放到主dex中。注意:Tinker会自动生成需要放在主dex的keep规则。在1.7.6版本之前,你需要手动将生成规则拷贝到自己的multiDexKeepProguard文件中。例如Sample中的multiDexKeepProguard file("keep_in_main_dex.txt")。在1.7.6版本之后,这里会通过脚本自动处理,无须手动填写。

另外,如果minsdkverion >=21, multiDexEnabled会被忽略。我们可以在build/intermediates/multi-dex查找最终的keep规则以及结果。