在Android app开发中由于各种原因,APK避免不了会遇到64k方法数的问题。64k本质上就是Android Dalvik 可执行的.dex中的Java方法数引用超过了65536。
问题产生原因
Android apk 中包含了classes.dex文件,.dex文件是Dalvik可执行的字节码文件,而.dex文件存放的是编译之后的Java代码。单个.dex文件限制最多能引用的方法数是65536个,包含Android Framework、App应用的第三方函数库、App自身的方法。
使用MultiDex解决64k限制问题
build.gradle文件配置
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 25
...
multiDexEnabled true
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
根据自己的项目引入MultiDexApplication
1.项目中没有自定义Application类,直接在AndroidManifest做以下配置。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.***.***">
<application
android:name="android.support.multdex.MultiDexApplication"
...
>
</application>
</manifest>
2.如果项目需要自定义Application类,只要继承MultiDexApplication。
public class MyApplication extends MultiDexApplication {
...
}
3.如果项目中已经有自定义的Application,而且不可以修改已经继承的父类,那么就做以下配置哦!
public class MyApplication extends Application {
...
//此方法在onCreate之前调用,开发者可以在此执行应用最先要做的事情。
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
最后,不到万不得已不要让应用走到需要用MultiDex Support Library处理64K方法数的问题,很大程度会降低我们app的性能。如果app超过64K方法数限制,建议从引用的第三方库文件开始优化,综合考虑第三库的性价比,找到最适合自己项目的库使用。