模块拆分后Jenkins上Android构建变慢 R8混淆任务耗时过长求助
排查与修复方案
- 开启子模块独立混淆
你当前的新library模块未开启独立混淆,所有类和资源都会直接传递给主App的R8任务统一处理,是R8耗时上涨的核心原因。在新模块build.gradle的对应构建类型闭包中添加minifyEnabled true,同时配置consumerProguardFiles 'proguard-rules.pro',补全新模块专属的混淆规则,不要留空proguard-rules.pro。子模块先完成混淆裁剪后,主App R8阶段需要处理的代码量会大幅降低。 - 提升Gradle运行内存配置
你当前配置的org.gradle.jvmargs=-Xmx4g在模块数量增加后,无法满足R8的内存需求,会频繁触发GC拖慢处理速度。将参数调整为org.gradle.jvmargs=-Xmx8g -XX:+UseParallelGC -Dkotlin.daemon.jvm.options="-Xmx2048M" -noverify,只要Jenkins构建机器内存足够,R8耗时会有明显下降。 - 关闭R8全量优化模式
在gradle.properties中添加android.enableR8.fullMode=false,全量模式下R8会执行非常耗时的激进优化,若你们对包大小没有极致要求,关闭后可减少30%以上的R8处理耗时。 - 清理重复依赖
执行./gradlew :你的新模块名:dependencies检查新模块是否引入了和主App、base模块重复的依赖项,对重复依赖使用exclude规则排除,减少R8需要处理的类数量,同时也能避免重复类警告拖慢R8处理速度。 - 配置Gradle远程缓存
在Jenkins上配置Gradle远程缓存,将各模块的编译产物、R8中间产物存入共享缓存,只要模块代码没有变动,就算是无依赖缓存的全新构建,也可以直接复用已有的模块编译缓存,能将Jenkins构建耗时降到和本地Android Studio构建接近的水平。
内容的提问来源于stack exchange,提问作者Woochan Lee
相关产品推荐
相关产品推荐

