切换Java8后Android项目Gradle卡在transformClassesWithDexBuilderForDebug求优化
我之前也碰到过切换到Java 8后Dex构建阶段拖慢整个流程的问题,结合你的情况(Gradle插件3.1.2,首次构建超30分钟),可以试试下面这些针对性的优化方案:
开启Dex增量构建
在app模块的build.gradle里添加配置,让Dex只处理变更的类,大幅减少重复构建的工作量:android { dexOptions { incremental true preDexLibraries = false // 禁用预编译依赖库,避免重复处理 } }首次构建还是会全量处理,但后续构建速度会有明显提升。
升级Gradle插件与Gradle版本
你当前使用的3.1.2版本对Java 8的支持还不够成熟,后续版本针对Dex构建做了大量性能优化。建议升级到3.5.4(和旧版本兼容性较好的稳定版),同时对应升级Gradle到5.4.1(插件与Gradle版本需匹配)。升级后Java 8字节码的处理效率会显著提高。调整Gradle JVM堆内存
在项目根目录的gradle.properties里加大JVM内存分配,避免内存不足导致频繁GC拖慢构建:org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8足够的内存能提升Dex构建时的IO和计算效率,减少卡顿。
优化依赖配置
- 用
./gradlew app:dependencies命令查看依赖树,排查并移除重复依赖,减少需要处理的类数量; - 尽量使用
implementation替代compile,避免不必要的依赖传递,缩小Dex处理范围。
- 用
启用R8代码压缩(替代ProGuard)
R8对Java 8的兼容性更好,且压缩与Dex合并的效率远超ProGuard。在gradle.properties里添加以下配置开启R8:android.enableR8=true注意适配R8的规则,避免业务代码被误删。
清理Gradle缓存
缓存损坏可能导致构建异常缓慢,手动删除~/.gradle/caches目录后重新构建即可。首次构建会重新下载所有依赖,但之后的构建速度会恢复正常。关闭Android Studio即时运行
即时运行在Java 8环境下可能存在兼容性问题,反而拖慢构建流程。可以通过File > Settings > Build, Execution, Deployment > Instant Run关闭该功能。
这些方案可以组合使用,优先尝试升级Gradle插件和开启增量构建,这两个是提升构建速度最有效的手段。如果问题仍存在,可以用./gradlew clean assembleDebug --info查看详细构建日志,定位具体是哪个类或依赖导致的卡顿,再针对性优化。
内容的提问来源于stack exchange,提问作者Rivu Chakraborty

