问题
1.android5.0(API21)以下会存在65535方法数分包的问题:方法数限制65535;LinearAlloc限制4M(Android2.2)/5M(Android2.3)/8M/16M(Android4.0 /API level 14 )
google官方方案:
1.android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
2.在自己自定义的Application重写:
attachBaseContext 的调用是在 ContentProvider 的 OnCreate 调用之前,所以当 app 有注册 ContentProvider 的时候,就必须在 attachBaseContext 中加载从 dex,否则可以将MultiDex.install(this)放在onCreate()方法中.
新问题:
1.项目很大时从dex文件可能很大,app启动时加载从dex文件时间过长导致可能ANR
2.虽然gradle会自己将启动相关的文件并入主dex,但是低版本(如android4.3)还是可能存在classNotFound的异常,说明低版本没有做好将启动相关的文件并入主dex的工作
问题1解决方案:
通过ant打包命令:--set-max-idx-number=48000 指定每个dex文件方法数为48000
问题2解决方案:
一.直接抛弃api 14及以下的机型(设minSdkVersion 14);或
二.见 dex分包变形记 第三部分