问题描述
编译时出现Cannot fit requested classes in a single dex file (# methods: 73436 > 65536)
的问题。
原因:项目貌似有点大,已经超过65k个方法。一个dex已经装不下了,需要个多个dex,也就是multidex ,因为Android系统定义总方法数是一个short int,short int 最大值为65536。
解决办法
①、在 app 的 build.gradle 文件中
android {
defaultConfig {
···
// 这里添加
multiDexEnabled true
}
}
dependencies {
// 引入support支持库的multidex库
implementation 'com.android.support:multidex:1.0.3'
//或androidx支持库的multidex库
implementation 'androidx.multidex:multidex:2.0.1'
}
②、在自定义的 application 中初始化 MultiDex
import android.app.Application;
import android.content.Context;
import androidx.multidex.MultiDex;
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context context){
super.attachBaseContext(context);
MultiDex.install(this);
}
}
③在AndroidManifest
的application
标签内修改android:name
<application
······
android:name=".MyApplication" >
······
</application>
如果还不行,则修改android:name
为android:name="androidx.multidex.MultiDexApplication"
再编译。我就是遇到这个问题,一开始使用android:name=".MyApplication"
编译不行,然后使用android:name="androidx.multidex.MultiDexApplication"
再编译就正常运行了,接着我再次改为android:name=".MyApplication"
后也能运行,这里我有点纳闷,不知道啥原因,知道原因的朋友可以发出来大家学习学习。