gradle.properties 配置
源:Gradle 官方文档 - Build Environment
gradle.properties 文件用于配置 Gradle 构建环境、JVM 参数和项目属性,合理配置可以显著提升构建性能和开发体验。
gradle.properties 文件位置
全局配置
位置:~/.gradle/gradle.properties
作用范围:所有 Gradle 项目
适用场景:
- 全局 JVM 参数
- 个人开发环境配置
- 私有仓库凭证
项目配置
位置:<project-root>/gradle.properties
作用范围:当前项目
适用场景:
- 项目特定配置
- 团队共享配置
- 项目属性定义
子项目配置
位置:<project-root>/<subproject>/gradle.properties
作用范围:特定子项目
JVM 参数配置
堆内存配置
properties
# 设置最大堆内存 4GB
org.gradle.jvmargs=-Xmx4096m
# 设置初始堆内存
org.gradle.jvmargs=-Xms512m -Xmx4096m
# 设置元空间大小
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m推荐配置:
| 项目规模 | 推荐配置 |
|---|---|
| 小型项目(< 10模块) | -Xmx2048m |
| 中型项目(10-50模块) | -Xmx4096m |
| 大型项目(> 50模块) | -Xmx6144m 或更高 |
垃圾回收器配置
properties
# 使用 G1 垃圾回收器(推荐)
org.gradle.jvmargs=-Xmx4096m -XX:+UseG1GC
# 使用 Z GC(JDK 15+,超大项目)
org.gradle.jvmargs=-Xmx8192m -XX:+UseZGC错误诊断
properties
# OOM 时生成 heap dump
org.gradle.jvmargs=-Xmx4096m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps
# 打印 GC 详情
org.gradle.jvmargs=-Xmx4096m -XX:+PrintGCDetails -XX:+PrintGCDateStampsGradle Daemon 配置
启用 Daemon
properties
# 启用 Gradle Daemon(默认启用)
org.gradle.daemon=true优势:
- 避免每次构建启动 JVM
- 缓存类加载和项目模型
- 显著提升构建速度
Daemon 超时
properties
# Daemon 空闲超时(毫秒)
org.gradle.daemon.idletimeout=3600000 # 1小时Daemon JVM 参数
properties
# 专门为 Daemon 设置 JVM 参数
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8并行构建配置
启用并行构建
properties
# 启用并行构建
org.gradle.parallel=true
# 设置并行 workers 数量(默认为 CPU 核心数)
org.gradle.workers.max=4注意:
- 适用于多模块项目
- 确保模块间依赖正确配置
- 可能增加内存消耗
按需配置
properties
# 仅配置需要的项目(实验性)
org.gradle.configureondemand=true构建缓存配置
启用构建缓存
properties
# 启用本地构建缓存
org.gradle.caching=true效果:
- 复用之前构建的输出
- 跨分支构建加速
- 团队成员共享缓存
文件监控
properties
# 启用文件系统监控(提升增量构建)
org.gradle.vfs.watch=true优势:
- 监听文件系统变化
- 避免重复扫描
- 提升二次构建速度
Android 专用属性
Kapt 配置
properties
# 启用 Kapt 增量编译
kapt.incremental.apt=true
# 使用 Worker API 并行执行
kapt.use.worker.api=true
# 缓存 Kapt 输出
kapt.include.compile.classpath=falseR8/ProGuard 配置
properties
# 启用 R8 Full Mode
android.enableR8.fullMode=true
# 启用资源缩减
android.enableResourceOptimizations=trueBuildConfig 和 R 类
properties
# 非常量 R 类(提升编译速度)
android.nonFinalResIds=true
# 非传递性 R 类
android.nonTransitiveRClass=true
# 默认不生成 BuildConfig
android.defaults.buildfeatures.buildconfig=false其他 Android 属性
properties
# 启用 Jetifier(AndroidX 迁移)
android.useAndroidX=true
android.enableJetifier=true
# 禁用自动生成 Android Test Orchestrator
android.experimental.testOptions.emulatorSnapshots.maxSnapshotsForTestFailures=0日志和调试
日志级别
properties
# 设置日志级别
org.gradle.logging.level=info级别:quiet, warn, lifecycle, info, debug
警告控制
properties
# 隐藏废弃功能警告
org.gradle.warning.mode=none
# 警告模式(all, summary, none)
org.gradle.warning.mode=summary控制台输出
properties
# 富文本控制台(颜色、进度条)
org.gradle.console=rich
# 其他选项:plain, auto, verbose项目自定义属性
定义项目属性
properties
# gradle.properties
app_version_name=1.0.5
app_version_code=10
enable_leak_canary=true
api_base_url=https://api.example.com在构建脚本中使用
kotlin
// build.gradle.kts
val appVersionName: String by project
val appVersionCode: String by project
val enableLeakCanary: String by project
android {
defaultConfig {
versionName = appVersionName
versionCode = appVersionCode.toInt()
}
}
dependencies {
if (enableLeakCanary.toBoolean()) {
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.12")
}
}条件属性
kotlin
val myProperty: String? = project.findProperty("myProperty") as? String
val flag = project.hasProperty("enable_feature")环境变量集成
从环境变量读取
properties
# 使用环境变量
systemProp.http.proxyHost=${env.HTTP_PROXY_HOST}
systemProp.http.proxyPort=${env.HTTP_PROXY_PORT}CI/CD 环境
properties
# CI 标志
is_ci_build=false在 CI 中覆盖:
bash
export ORG_GRADLE_PROJECT_is_ci_build=true使用:
kotlin
val isCiBuild: String by project
if (isCiBuild.toBoolean()) {
// CI专用配置
}网络代理配置
HTTP 代理
properties
systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=username
systemProp.http.proxyPassword=password
# 不使用代理的主机
systemProp.http.nonProxyHosts=*.example.com|localhostHTTPS 代理
properties
systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=username
systemProp.https.proxyPassword=password性能优化配置模板
推荐配置(中型项目)
properties
# JVM 参数
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# Gradle Daemon
org.gradle.daemon=true
org.gradle.daemon.idletimeout=3600000
# 并行构建
org.gradle.parallel=true
org.gradle.workers.max=4
# 构建缓存
org.gradle.caching=true
org.gradle.vfs.watch=true
# 配置缓存(实验性)
org.gradle.configuration-cache=true
# 日志控制
org.gradle.console=rich
org.gradle.warning.mode=summary
# Android 优化
android.useAndroidX=true
android.nonFinalResIds=true
android.nonTransitiveRClass=true
kapt.incremental.apt=true
kapt.use.worker.api=true大型项目配置
properties
# 更大的堆内存
org.gradle.jvmargs=-Xmx8192m -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC -Dfile.encoding=UTF-8
# 更多 workers
org.gradle.workers.max=8
# 其他同上...敏感信息管理
不要提交敏感信息
❌ 错误做法:
properties
# gradle.properties(提交到版本控制)
api_key=abc123secret
db_password=mypassword✅ 正确做法:
方案一:使用本地文件
properties
# gradle.properties
# 不提交 local.propertiesproperties
# local.properties(不提交到版本控制)
api_key=abc123secret
db_password=mypassword读取:
kotlin
val localProperties = Properties()
file("local.properties").inputStream().use {
localProperties.load(it)
}
val apiKey = localProperties.getProperty("api_key")方案二:使用环境变量
``bash export ORG_GRADLE_PROJECT_api_key=abc123secret
```kotlin
val apiKey: String by project方案三:使用全局 gradle.properties
properties
# ~/.gradle/gradle.properties(用户目录,不提交)
api_key=abc123secret最佳实践
合理分配内存:
- 根据项目规模设置
- 留意 OOM 错误
- 监控 Daemon 内存使用
启用性能优化:
- 并行构建
- 构建缓存
- 文件监控
Android 项目优化:
- 非常量 R 类
- 非传递性 R 类
- Kapt 增量编译
敏感信息安全:
- 使用环境变量
- 使用 local.properties
- 使用全局 gradle.properties
- 永远不要提交密码到版本控制
版本控制:
- 提交项目 gradle.properties
- 不提交 local.properties
- 使用注释说明必需属性
团队协作:
- 文档化必需属性
- 提供默认值
- 使用
findProperty安全读取