Skip to content

multiDexKeepProguard won't work if minSDK >= 21 #1084

Closed
@noproxy

Description

@noproxy

异常类型:编译异常
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了。

如:
#859
#877
#938
#993
#1032

在这些issue里,@NickKJ 提到的通过CLI可以解决,是因为:
他本人项目min sdk < 21,而通过点击Android Studio的按钮执行时,Studio会注入init.gradle,对build type为debug的variant覆写min sdk为很高的版本,从而提高编译速度以及启用更高级的profile功能。所以表现为通过cli执行可以解决。实际上如果项目本来的min sdk >=21, 通过cli也无法解决这个问题。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions