64k方法数(MultiDex)

xiaoxiao2021-02-28  108

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

转载请注明原文地址: https://www.6miu.com/read-78305.html

最新回复(0)