Gradle 核心配置属性详解 - 新手指南(一)

一、Gradle 核心配置属性详解

1. 基础性能配置

属性 作用 建议值 版本要求
org.gradle.parallel 启用并行构建(多模块并行编译) true Gradle 4.10+
org.gradle.caching 启用构建缓存(复用历史构建输出) true Gradle 3.5+
org.gradle.daemon 启用守护进程(减少 JVM 启动开销) true Gradle 3.0+
org.gradle.jvmargs 调整 JVM 堆内存及 GC 策略 -Xmx4g -XX:+UseG1GC 根据机器配置调整

2. Android 专用配置

属性 作用 建议值 版本要求
android.enableBuildCache 启用 Android 构建缓存 true AGP 3.2+
android.nonTransitiveRClass 禁用传递性 R 类(减少资源索引冗余) true AGP 7.0+
android.enableJetifier 自动迁移 Support 库到 AndroidX(旧项目过渡使用) false 完成迁移后关闭
android.defaults.buildfeatures.buildconfig 禁用自动生成 BuildConfig(无自定义配置时) false AGP 4.1+

3. 高级优化配置

属性 作用 建议值 版本要求
kotlin.incremental Kotlin 增量编译(仅编译改动部分) true Kotlin 1.3.20+
android.useNewApkCreator 启用新版 APK 打包工具(提升打包速度) true AGP 3.3+
android.enableProfileJson 生成构建分析报告(用于诊断性能瓶颈) true AGP 7.0+

二、构建速度优化方案(分阶段实施)

阶段 1:基础优化(所有项目适用)

properties 复制代码
# gradle.properties
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx4g -XX:+UseG1GC -Dfile.encoding=UTF-8

# Android 配置
android.enableBuildCache=true
android.nonTransitiveRClass=true
android.defaults.buildfeatures.buildconfig=false

阶段 2:依赖优化

  1. 固定依赖版本 :避免动态版本号(如 2.3.+ → 2.3.4)

  2. 启用依赖约束:

    kotlin 复制代码
    // build.gradle.kts
    dependencies {
        implementation("com.squareup.retrofit2:retrofit:2.9.0") {
            version { strictly("2.9.0") }
        }
    }
  3. 排除无用传递依赖:

    kotlin 复制代码
    implementation("com.example:lib:1.0") {
        exclude(group = "com.unused", module = "old-utils")
    }

阶段 3:模块化与增量编译

  1. 拆分功能模块 :将稳定模块设为 api,频繁修改模块设为 implementation

  2. 启用配置缓存(需兼容性检查):

    properties 复制代码
    org.gradle.unsafe.configuration-cache=true
    org.gradle.unsafe.configuration-cache.problems=warn
  3. 优化 Kotlin 编译:

    kotlin 复制代码
    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions {
            freeCompilerArgs = listOf("-Xjvm-default=all")
            jvmTarget = "11"
            incremental = true
        }
    }

阶段 4:高级加速技巧

  1. 按需编译(实验性):

    properties 复制代码
    # gradle.properties
    android.experimental.try-with-resources=true
  2. 禁用 PNG 压缩(Debug 模式):

    groovy 复制代码
    android {
        buildTypes {
            debug {
                crunchPngs false
            }
        }
    }
  3. 使用预编译依赖(如 Google Play Services):

    kotlin 复制代码
    dependencies {
        implementation("com.google.android.gms:play-services-maps:18.2.0") {
            isTransitive = false
        }
    }

三、诊断与监控工具

1. 生成构建分析报告

bash 复制代码
./gradlew assembleDebug --profile --offline
  • 查看 build/reports/profile/ 下的 HTML 报告

2. 使用 Gradle 构建扫描

bash 复制代码
./gradlew build --scan
  • 访问 Gradle Build Scan 分析细节

3. 查看任务耗时

bash 复制代码
./gradlew tasks --all --timing

四、注意事项

  1. 版本兼容性:确保 AGP、Gradle、Kotlin 版本匹配(推荐使用最新稳定版)
  2. 增量问题 :遇到编译异常时,尝试 ./gradlew clean
  3. CI/CD 环境:统一本地与 CI 的 JDK 版本和 Gradle 配置

五、完整配置示例

properties 复制代码
# gradle.properties
# 基础性能
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx4g -XX:+UseG1GC -Dfile.encoding=UTF-8

# Android 优化
android.enableBuildCache=true
android.nonTransitiveRClass=true
android.defaults.buildfeatures.buildconfig=false
android.enableJetifier=false

# Kotlin 优化
kotlin.incremental=true
kotlin.parallel.tasks.in.project=true

# 实验性配置
android.experimental.try-with-resources=true
org.gradle.unsafe.configuration-cache=true
org.gradle.unsafe.configuration-cache.problems=warn

通过以上配置和优化策略,可将构建时间 减少 30%-70%(视项目规模)。建议逐步实施并监控效果,优先处理耗时最长的构建阶段。

相关推荐
To_OC8 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
excel10 小时前
研究 Vue 3 源码的收获
前端·vue.js
Android系统攻城狮10 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
可乐鸡翅yeah_12 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx12 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师12 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow12 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路12 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他13 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
mantou13213 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端