升级Android Studio至3.1后遇单Dex文件方法数超限问题求助
解决Android Studio 3.1升级后的方法数超限(65536)问题
嘿,这个问题我熟!很多开发者升级到Android Studio 3.1后都碰到过,本质就是咱们项目的方法总数超过了Android单个dex文件的上限65536,再加上你当前配置里multiDexEnabled还没开启,D8编译器自然就抛出报错了。咱们一步步来搞定它:
第一步:启用MultiDex核心配置
先打开app模块下的build.gradle,把defaultConfig里的multiDexEnabled false改成true,同时添加MultiDex的依赖包:
apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion '27.0.3' defaultConfig { multiDexEnabled true // 关键:把false改成true applicationId "com.example.xxx" // 你的其他默认配置... } // 其他Android相关配置... } dependencies { // 添加MultiDex依赖,版本1.0.3适配你的compileSdk 27 implementation 'com.android.support:multidex:1.0.3' }
第二步:配置Application类
这一步分两种情况处理:
- 如果有自定义Application类:让它继承
MultiDexApplication,替换原来的Application父类:
public class MyApplication extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); // 你的应用初始化逻辑照常编写 } }
然后在AndroidManifest.xml的application标签里指定这个自定义类:
<application android:name=".MyApplication" // 你的其他application属性...> // 其他组件配置... </application>
- 如果没有自定义Application类:直接在
AndroidManifest.xml的application标签里指定系统的MultiDexApplication:
<application android:name="android.support.multidex.MultiDexApplication" // 你的其他application属性...> // 其他组件配置... </application>
第三步:可选优化(推荐操作,减少方法数)
要是启用MultiDex后还想进一步优化,或者担心未来方法数再超标,可以试试这些操作:
- 清理冗余依赖:用命令
./gradlew app:dependencies生成依赖树,删掉项目里用不到的库 - 开启R8混淆压缩:在
build.gradle的release构建类型里开启混淆,自动移除未使用的代码和方法:
android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
- 拆分动态模块:把非核心功能做成动态Feature模块,运行时再加载,减轻主dex的压力
对了,为啥升级到3.1才出问题?大概率是新版本的D8编译器在方法数统计上更精准,或者升级过程中引入了新依赖,刚好让方法数跨过了65536的阈值。按上面的步骤改完,重新编译应该就能正常运行啦!
内容的提问来源于stack exchange,提问作者czane
相关产品推荐
相关产品推荐

