Android编译报错:transformClassesWithMultidexlistForShopifyDebug任务执行失败
问题描述
编译Android项目时遇到如下报错:
Error:Execution failed for task ':sample:transformClassesWithMultidexlistForShopifyDebug'.
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.android.multidex.ClassReferenceListBuilder with arguments {/project/bkup/13_feb_2018/valyangadi/sample/build/intermediates/multi-dex/shopify/debug/componentClasses.jar /project/bkup/13_feb_2018/valyangadi/sample/build/intermediates/transforms/jarMerging/shopify/debug/jars/1/1f/combined.jar}
已完成的配置尝试:
- 启用了
multiDexEnabled true - 添加依赖
compile 'com.android.support:multidex:1.0.1' - 配置了:
dexOptions { javaMaxHeapSize "4g" }
尝试过删除debug文件夹、clean和rebuild项目,但报错仍未解决。
亲测有效的解决方案
我之前也踩过这个Multidex的坑,给你几个可行的排查方向:
确认Multidex的完整配置
除了build.gradle里的设置,还要检查Application类:- 如果没有自定义Application,在
AndroidManifest.xml中把Application的name改为android.support.multidex.MultiDexApplication - 如果有自定义Application,要么让它继承
MultiDexApplication,要么重写attachBaseContext方法:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
- 如果没有自定义Application,在
排查依赖冲突与重复类
这个报错很多时候是依赖包中存在重复类导致的。可以执行以下命令查看模块的依赖树:./gradlew sample:dependencies重点检查support库、第三方库的版本是否一致,把重复的依赖或者版本冲突的库统一成同一个版本。
调整全局Gradle JVM参数
仅设置dexOptions的堆大小可能不够,在项目根目录的gradle.properties中添加全局JVM参数:org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8彻底清理缓存
除了常规的clean操作,还可以:- 删除项目根目录下的
.gradle文件夹 - 删除用户目录下的
.gradle/caches文件夹(比如~/.gradle/caches)
之后重新Sync项目再尝试构建。
- 删除项目根目录下的
检查混淆与Transform插件
如果开启了混淆,确保ProGuard规则没有误移除Multidex相关类;如果项目中使用了自定义的Transform插件,暂时禁用它,排查是否存在冲突。
内容的提问来源于stack exchange,提问作者Midhilaj

