如何在Kotlin代码中读取gradle.properties中定义的自定义属性
实现方案
你可以通过Gradle自动生成常量代码的方式,将gradle.properties中的属性值注入到Kotlin代码中,全程不需要硬编码版本号,以下是两种适配不同场景的实现方式:
方案1:适配Android Kotlin库
你可以直接借助Android原生提供的BuildConfig能力注入属性:
- 打开模块级的
build.gradle.kts(Groovy语法同理做调整即可),先读取gradle.properties中的自定义属性:
// 读取gradle.properties中的libraryVersion属性 val libraryVersion: String by project
- 在
android->defaultConfig代码块中添加BuildConfig字段配置:
android { defaultConfig { // 其他原有配置... buildConfigField("String", "LIBRARY_VERSION", "\"${libraryVersion}\"") } }
- 同步Gradle配置后,你就可以在库的任意Kotlin代码中直接调用
BuildConfig.LIBRARY_VERSION拿到版本值。
方案2:适配纯Kotlin/JVM库
如果是不依赖Android环境的纯Kotlin库,你可以通过自定义Gradle任务自动生成常量类:
- 打开模块级的
build.gradle.kts,添加如下配置:
// 读取gradle.properties中的libraryVersion属性 val libraryVersion: String by project // 注册自动生成常量类的任务 tasks.register("generateLibraryConstants") { val outputDir = layout.buildDirectory.dir("generated-sources/kotlin/constants").get().asFile outputs.dir(outputDir) doFirst { outputDir.mkdirs() // 替换成你库的实际包名 val packageName = "com.your.library.package" val constantFile = File(outputDir, "LibraryConstants.kt") constantFile.writeText(""" package $packageName object LibraryConstants { const val VERSION = "$libraryVersion" } """.trimIndent()) } } // 将生成的代码目录加入源码集,编译时自动包含 kotlin.sourceSets.main { kotlin.srcDir(tasks.named("generateLibraryConstants")) }
- 同步Gradle配置后,你就可以在库代码中导入对应包名下的
LibraryConstants.VERSION直接使用。
注意事项
- 该配置是在你打包库的时候就将版本值固化到编译后的字节码中,下游依赖你的库的用户不需要做任何额外配置就能拿到正确的版本号
- 每次修改
gradle.properties中的libraryVersion值后,重新编译就会自动更新代码中的常量值,不需要手动修改任何业务代码
内容的提问来源于stack exchange,提问作者superdave
相关产品推荐
相关产品推荐

