No1:
No2:
在Android中单个dex文件所能够包含的最大方法数为65536,这包含Android FrameWork、依赖的jar包以及应用本身的代码中的所有方法。
No3:
使用multidex来解决方法数越界
apply plugin: \'com.android.application\'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.ryg.multidextest"
minSdkVersion 8
targetSdkVersion 22
versionCode 1
versionName "1.0"
// enable multidex support
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(\'proguard-android.txt\'), \'proguard-rules.pro\'
}
}
}
afterEvaluate {
println "afterEvaluate"
tasks.matching {
it.name.startsWith(\'dex\')
}.each { dx ->
def listFile = project.rootDir.absolutePath + \'/app/maindexlist.txt\'
println "root dir:" + project.rootDir.absolutePath
println "dex task found: " + dx.name
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += \'--multi-dex\'
dx.additionalParameters += \'--main-dex-list=\' + listFile
dx.additionalParameters += \'--minimal-main-dex\'
}
}
dependencies {
compile fileTree(dir: \'libs\', include: [\'*.jar\'])
compile \'com.android.support:appcompat-v7:22.1.1\'
compile \'com.android.support:multidex:1.0.0\'
}
afterEvaluate区域是为了指定dex文件中包含哪些类,类名写在maindexlist.txt中
注意:multidex的jar包中的9个类必须也要打包到主dex中
代码支持
public class TestApplication extendsApplication {
@Overrideprotected voidattachBaseContext(Context base) {super.attachBaseContext(base);
MultiDex.install(this);
}
}
Multidex方法虽然很好地解决了方法数越界这个问题,但也会导致应用启动速度会降低,是因为应用启动时会加载额外的dex文件。
No4:
No5: