在使用AndroidStudio开发的时候,如果你的工程运行时出现了类似以下的错误,则表示你工程所使用的方法数量已经超过了65536个。
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
那为什么当方法数超过这个数量时会有限制呢?
AndroidStudio官方文档是这么说的:
Android application (APK) files contain executable bytecode files in the form of Dalvik Executable (DEX) files, which contain the compiled code used to run your app. The Dalvik Executable specification limits the total number of methods that can be referenced within a single DEX file to 65,536—including Android framework methods, library methods, and methods in your own code. In the context of computer science, the term Kilo, K, denotes 1024 (or 2^10). Because 65,536 is equal to 64 X 1024, this limit is referred to as the '64K reference limit'.
<br />
Android应用(APK)文件包含以Dalvik可执行文件(DEX)的形式的可执行字节码文件,它包含编译后的代码用于运行您的应用。Dalvik可执行的规范限制了方法总数可以在单个DEX文件内引用到65536个,包括Android框架方法,引用库的方法,您自己代码库的方法。在计算机科学中,术语基洛,K,表示1024(或2 ^ 10)。因为65536等于64 X 64,这个极限被称为"64K引用限制"。
<br />
那么怎么解决呢?只需三步操作:
1.修改你app(你所要解决的工程)的build.gradle文件:
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
这行multiDexEnabled true
是你需要添加的
2.给你的工程添加以下依赖,依赖不一定要在app里的build.gradle,可以在app依赖的module或任意库里添加:
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
所使用的版本号现在最新为1.0.1
,如果有提示更新的版本可用,改到最新版本即可。
3.在你自定义的Application类里重载以下方法:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
//Avoiding the 64K Limit
MultiDex.install(this);
}
当然,如果没有自定义的Application,你也可以在你的AndroidMainfest.xml里增加以下申明
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
或者让你自定义的Application继承MultiDexApplication(不推荐)。
参考文档:
https://developer.android.com/studio/build/multidex.html#avoid (需翻墙)