新版 Android Studio 新建项目中 默认使用 kotlin 脚本 build.gradle.kts,设置 全局变量 与传统的 groovy 的 build.gradle 也有一些区别
extra
和 properties
extra 和 properties 都是 Gradle 项目对象(Project)的成员属性,用于在构建过程中存储和获取自定义属性值。
extra 属性是一个可变的 HashMap,可以将任意类型的键值对存储在其中。你可以使用 extra["key"] = value
来设置属性值,并通过 extra["key"]
来获取属性值。
properties 属性是一个不可变的 Map,其中存储了一些默认的 Gradle 属性值。你可以通过 properties["key"]
来获取属性值,但不能修改这些默认值。
若属性不存在, properties 会返回 null, extra 会报错
extra["key"] = value
设置的属性, 获取时 extra["key"]
必须是通过 project
对象去调用,app 模块对象的 extra 获取不到,即在模块中使用需要 project.extra["key"]
基于 Android Studio Giraffe 测试,properties 和 extra 在 kts 的 plugins 代码块里报红但可正常执行
kotlin 的 build.gradle.kts
// 设置属性
// project 的 build.gradle.kts
buildscript {
extra["kotlinVersion"] = "1.9.+"
}
// 获取
println(properties["kotlinVersion"]) // properties.get
println(project.extra["kotlinVersion"]) // 在模块中使用需要 `project.extra["key"]`
groovy 的 build.gradle
// 设置属性
// project 的 build.gradle
buildscript {
ext.kotlin_version = "1.9.+"
}
// 获取
// 可直接作为变量使用
println(kotlin_version)
System.setProperty
和 System.getProperty
System.setProperty 和 System.getProperty 是 Java 标准库提供的方法,用于设置和获取系统级别的属性值。
System.setProperty(key, value) 用于设置属性值,即将指定的键和值存储为系统级别的属性。这些属性值对整个应用程序生效,在应用程序的所有部分都可以访问。
System.getProperty(key) 用于获取指定键的属性值。
gradle.properties
中设置的属性可以使用 gradle.properties
定义系统属性,systemProp.kotlinVersion=1.9.+
,系统属性以 systemProp
开头。系统属性读取方式 System.getProperty("kotlinVersion")
,
可当作普通属性,gradle.properties
中定义 systemProp.kotlinVersion=1.9.+
, 普通属性读取 properties["systemProp.kotlinVersion"]
或 project.extra["systemProp.kotlinVersion"]
。在 plugins 代码块可能会爆红,但可以正常运行
在 properties 设置属性
# gradle.properties
systemProp.kotlinVersion=1.9.+
simpleKey=123
在 kotlin 脚本 build.gradle.kts 读取
println("====== 系统属性读取, 读取 systemProp 后的 key ======")
println(System.getProperty("kotlinVersion")) // 获取指定系统属性
println(System.getProperties().getProperty("kotlinVersion")) // 获取所有系统属性的 map 再 get 指定属性
println("====== 普通属性读取, 读取完整的 key ======")
println(property("systemProp.kotlinVersion")) // 获取指定属性
println(properties["systemProp.kotlinVersion"]) // 获取所有属性的 map 再 get 指定属性。properties 和 extra 在 kts 的 plugins 代码块里报红但可正常执行
println(project.extra["systemProp.kotlinVersion"]) // 在模块中使用需要 `project.extra["key"]`
在 groovy 脚本 build.gradle 读取
println("====== 系统属性读取, 读取 systemProp 后的 key ======")
println(System.getProperty('kotlinVersion')) // 获取指定系统属性
println(System.properties['kotlinVersion']) // 获取所有系统属性的 map 再 get 指定属性
println("====== 普通属性读取, 读取完整的 key ======")
println(property("systemProp.kotlinVersion")) // 获取指定属性
println(getProperty('systemProp.kotlinVersion')) // 获取指定属性
println(project.ext["systemProp.kotlinVersion"]) // 在模块中使用需要 `project.ext["key"]`
println(simpleKey) // 简单的 key 可直接作为变量使用