解决MultiDex过程引发的主包过大

Plugin


https://github.com/eyyoung/DexFixPlugin

主包过大起因


官方MultiDex在分包过程中会分析Application依赖的类,并认为Application依赖的类需要放入主包中,否则由于非主包中的类未加载,将触发Class Not Found Exception.

但当Application依赖的类过多的时候,会导致主包过大,引发打包失败,抛出"Too many classes in –main-dex-list"

官方MultiDex不仅分析Application直接依赖类,也会分析AndroidManifest中存在的Activity,Service等依赖的类,此操作非必要,但更容易引发"Too many classes in –main-dex-list".

相关源码


https://android.googlesource.com/platform/tools/base/+/gradle_2.0.0/build-system/gradle-core/src/main/groovy/com/android/build/gradle/internal/transforms/MultiDexTransform.java

https://android.googlesource.com/platform/tools/base/+/gradle_2.0.0/build-system/gradle-core/src/main/groovy/com/android/build/gradle/internal/scope/VariantScopeImpl.java

https://android.googlesource.com/platform/dalvik/+/master/dx/src/com/android/multidex/MainDexListBuilder.java

相关原理


通过注入additionalParameters参数,指定maindexlist,maindexlist通过MainDexListBuilder类生成,MainDexListBuilder可通过Proguard规则生成

你可能感兴趣的:(解决MultiDex过程引发的主包过大)