64k方法数(MultiDex)

来源:互联网 发布:音画制作软件 编辑:程序博客网 时间:2024/06/03 20:23

由于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

阅读全文
0 0