由于Android平台的持续增长,Android应用程序的大小也随之增大。当你的应用程序引用库达到一定的规模,就会出错(64K):
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
第一步:
配置Module下的Gradle文件
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
apply plugin: 'com.android.application'
android {
// productFlavors是为了避免每次运行都把DEX重新加载一遍而设置的两套运行配置
productFlavors {
dev {
minSdkVersion 21
}
prod {
minSdkVersion 14
}
}
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "com.example.itgungnir.testmultidex"
minSdkVersion 11
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//设置MultiDex可用
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// 保证其他的lib没有被preDex
dexOptions {
preDexLibraries = false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
// MultiDex的依赖
compile 'com.android.support:multidex:1.0.0'
}
第二步:
配置Project下的Gradle文件
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
// 保证dex_files文件中指定的文件都加载到Main Dex中
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += '--multi-dex'
dx.additionalParameters += "--main-dex-list=$projectDir/dex_files".toString()
}
}
第三步:
需要在项目的Application文件中注入MultiDex
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 将MultiDex注入到项目中
MultiDex.install(this);
}
}
第四步:
Manifest文件中注册Application:
android:name=".MyApplication"
第五步:
开发阶段:
发布阶段:
把build variants 里面的build variant 选择成prodRelease