如何在Android的libs.versions.toml中读取本地properties文件版本号
问题解答
核心结论
不能直接在libs.versions.toml的[versions]区块读取外部properties文件的值——因为toml是静态配置文件,本身不支持动态读取外部文件的语法。
可行替代方案(解决AS提示不支持的问题)
既然toml里做不到动态读取,我们可以调整现有逻辑,把读取properties的操作整合到默认的libs版本目录(也就是对应libs.versions.toml的官方支持catalog),而非创建自定义的testLibs,这样Android Studio就不会再弹出不支持的提示了。
修改后的settings.gradle.kts代码
val rootProjectDir = rootProject.projectDir val propFile = File("$rootProjectDir/local_properties_file") val props = Properties() // 用use自动关闭流,更规范 propFile.inputStream().use { stream -> props.load(stream) } dependencyResolutionManagement { versionCatalogs { create("libs") { // 先加载原libs.versions.toml里的所有配置 from(files("libs.versions.toml")) // 把从properties读取的版本注入到默认catalog中 version("test", props.getProperty("test_version")) // 如果原toml里没定义test库,就添加这一行;已经定义的话可以省略 library("test", "com.test.test", "test-test").versionRef("test") } } }
修改后的build.gradle.kts代码
dependencies { // 改用官方支持的libs catalog引用依赖 implementation(libs.test) }
额外说明
- 这种方案既保留了从外部properties文件读取版本的需求,又完全符合Android Studio对版本目录的官方支持规范,不会再出现不兼容提示。
- 如果你的
libs.versions.toml里已经有其他版本和库的定义,from(files("libs.versions.toml"))会先加载原有配置,后续的version和library只会补充或覆盖对应项,不会影响其他配置。
内容的提问来源于stack exchange,提问作者am0909
相关产品推荐
相关产品推荐

