Description
异常类型:编译异常
tinker版本:如:1.9.9
gradle版本:如:3.3.2
是否使用热更新SDK:无
系统:Mac
在min sdk >= 21 时,Android Gradle Plugin,会忽视一切指定分包规则的参数,比如multiDexKeepProguard。
Google应该是考虑到:sdk 21开始android原生支持多dex,指定分包规则没有必要,并影响编译速度,所以在代码中显式的对min sdk >= 21的时候屏蔽了分包规则。
目前Tinker仍然要求loader相关类必须在第一个dex中,请问:
Tinker在min sdk >=21的时候是否有必要强行要求loader相关类在第一个dex?
如果没有必要的话,Tinker的Gradle Plugin需要移除相关检查和报错,否则就只能设置ignoreWarnings = true
才能编译通过。
如果有必要的话,需要寻找方案解决Android Gradle Plugin忽视分包规则的问题。
另外,在其他issue里面,很多loader classes are found in old secondary dex
相关问题是由这个引起的。其中很多都没有引起重视,被直接closed+wontfix了。
在这些issue里,@NickKJ 提到的通过CLI可以解决,是因为:
他本人项目min sdk < 21,而通过点击Android Studio的按钮执行时,Studio会注入init.gradle,对build type为debug的variant覆写min sdk为很高的版本,从而提高编译速度以及启用更高级的profile功能。所以表现为通过cli执行可以解决。实际上如果项目本来的min sdk >=21, 通过cli也无法解决这个问题。