编译通过但无法运行:transformClassesWithMultidexlist任务执行失败
我之前也踩过这个Multidex相关的构建坑,大概率是类引用处理、依赖冲突或者构建缓存出了问题,给你几个亲测有效的解决步骤:
第一步:清理构建缓存,重新构建
先试试最基础的清理操作,有时候缓存损坏会导致这种莫名其妙的错误。可以在终端运行:./gradlew clean ./gradlew assemblePropDebug或者直接在Android Studio里点击
Build > Clean Project,再选择Rebuild Project。第二步:排查依赖冲突或重复类
这个错误经常是因为不同依赖包包含了重复类,或者依赖版本不兼容导致的。你可以用依赖分析命令找出冲突点:./gradlew app:dependencies重点查看
compileClasspath下的依赖,有没有重复的库或者版本不一致的情况(比如多版本的AndroidX库)。找到冲突后,用exclude排除多余依赖,示例:implementation('com.example:some-library:1.0.0') { exclude group: 'androidx.appcompat', module: 'appcompat' }第三步:检查Multidex配置是否正确
确保app模块的build.gradle里Multidex配置没问题:android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' }如果有自定义Application类,要么让它继承
MultiDexApplication,要么在attachBaseContext里手动调用初始化:public class MyApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }别忘了在
AndroidManifest.xml里指定这个自定义Application类。第四步:给Gradle构建增加堆内存
有时候是构建过程内存不足导致的,你可以在项目根目录的gradle.properties里调整内存配置:org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8第五步:手动删除损坏的构建中间文件
错误里提到的componentClasses.jar如果损坏,也会导致任务失败。你可以手动删除这个文件所在的目录:rm -rf /Users/user/Documents/Repositories/secret/secret/app/build/intermediates/multi-dex/prp/debug/删除后重新构建项目即可。
如果以上步骤都试过还是没解决,建议把完整的错误堆栈信息贴出来,能更精准定位问题。
内容的提问来源于stack exchange,提问作者TSurkis

