最近项目新版本到 1.5.0,编译打包的时候又遇到方法数超过 65K 的问题,自己又添加了一遍,记录下来,做个开始。
Android 有个限制,你的每个 App 中函数最多只能有 65536 个。这包含了 Framework、依赖的 jar 包以及应用本身的代码中的所有方法。当应用方法数超过 65536 后,编译器就无法完成编译工作并会抛出异常。
直接解决,开撸
1. Android Studio,保证 Android SDK Build Tools 21.1及以上版本,修改 build.gradle 文件,在defaultConfig 中添加 multiDexEnabled true 配置。
android {
compileSdkVersion 24
buildToolsVersion "25.0.1
defaultConfig {
applicationId "com.xxx.xxx"
minSdkVersion 15
targetSdkVersion 22
versionCode 150
versionName "1.5.0"
multiDexEnabled true
}
...
}
2. 在 dependencies 中添加 multidex 的依赖:
compile 'com.android.support:multidex:1.0.1'
3. 代码中加入支持 multidex 的功能,三种方案
第一种:在 manifest 文件中指定 Application 为 MultiDexApplication。
<application
android:name="android.support.multidex.MultiDexApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
...
</application>
第二种:如果你的项目中有自定义的 Application 类,让应用的 Application 继承 MultiDexApplication。
public class TestApplication extends MultiDexApplication{
...
}
第三种:项目中不想继承 MultiDexApplication 类,重写 Application 的 attachBaseContext(Context base) 方法,此方法比 Application 的 onCreate 要先执行。
public class TestApplication extends MultiDexApplication{
...
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this );
}
...
}
因为我项目中有自定义的 application ,故直接重写 attachBaseContext 方法即可。