Skip to content

Gradle 属性配置

源:Gradle 官方文档 - Build Environment

Gradle 属性文件用于配置构建环境,包括 JVM 参数、Android 专用属性、项目属性等。

属性文件位置

gradle.properties

Gradle 按以下顺序查找属性文件(后者覆盖前者):

系统级(全局):

~/.gradle/gradle.properties  (macOS/Linux)
C:\Users\<username>\.gradle\gradle.properties  (Windows)

项目级

project-root/gradle.properties

常用 Gradle 属性

JVM 参数配置

properties
# JVM 堆内存大小
org.gradle.jvmargs=-Xmx4g

# 设置 Metaspace 大小
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g

# 使用并行 GC
org.gradle.jvmargs=-Xmx4g -XX:+UseParallelGC

# 完整推荐配置
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC

Gradle Daemon

properties
# 启用 Daemon(默认启用)
org.gradle.daemon=true

# Daemon 空闲超时(毫秒)
org.gradle.daemon.idletimeout=3600000

并行与缓存

properties
# 启用并行构建
org.gradle.parallel=true

# 启用构建缓存
org.gradle.caching=true

# 启用配置缓存
org.gradle.configuration-cache=true

# 配置缓存问题仅警告
org.gradle.configuration-cache.problems=warn

构建日志

properties
# 日志级别:quiet, warn, lifecycle, info, debug
org.gradle.logging.level=lifecycle

# 显示完整堆栈跟踪
org.gradle.logging.stacktrace=all

# 控制台输出类型:auto, plain, rich, verbose
org.gradle.console=rich

Android 专用属性

性能优化

properties
# 非传递性 R 类
android.nonTransitiveRClass=true

# 非常量 R 类
android.nonFinalResIds=true

# 禁用 Jetifier(已迁移到 AndroidX)
android.enableJetifier=false

# 使用 AndroidX
android.useAndroidX=true

R8 优化

properties
# 优化的资源缩减(AGP 8.1.2+)
android.r8.optimizedResourceShrinking=true

# 完整 R8 模式
android.enableR8.fullMode=true

构建功能

properties
# 启用 Build Features
android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=false
android.defaults.buildfeatures.renderscript=false
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=false

其他配置

properties
# 抑制警告
android.suppressUnsupportedCompileSdk=34

# 启用实验性功能
android.experimental.enableScreenRecordingForProfilerBuilds=true

项目自定义属性

gradle.properties 中定义自定义属性:

properties
# 自定义属性
MY_API_KEY=abc123
MY_BASE_URL=https://api.example.com
VERSION_MAJOR=1
VERSION_MINOR=0

build.gradle.kts 中读取:

kotlin
android {
    defaultConfig {
        buildConfigField("String", "API_KEY", "\"${project.property("MY_API_KEY")}\"")
        buildConfigField("String", "BASE_URL", "\"${project.property("MY_BASE_URL")}\"")
        
        val versionMajor = project.property("VERSION_MAJOR").toString().toInt()
        val versionMinor = project.property("VERSION_MINOR").toString().toInt()
        versionCode = versionMajor * 100 + versionMinor
    }
}

环境变量

使用系统环境变量:

properties
# 从环境变量读取
MY_SECRET=${env.MY_SECRET}

build.gradle.kts 中:

kotlin
val mySecret = System.getenv("MY_SECRET") ?: "default_value"

最佳实践

敏感信息管理

将包含敏感信息的 gradle.properties 添加到 .gitignore

bash
# .gitignore
gradle.properties
local.properties

提供示例文件:

bash
gradle.properties.example

推荐配置模板

properties
# JVM 配置
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configuration-cache=true

# Android 优化
android.nonTransitiveRClass=true
android.nonFinalResIds=true
android.enableJetifier=false
android.useAndroidX=true

# 项目信息(示例)
VERSION_NAME=1.0.0
VERSION_CODE=1