64k方法数(MultiDex)

由于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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值