Kotlin多平台项目:如何在公共代码中访问构建变量
在Kotlin多平台SDK中实现跨平台的BuildConfig式变量共享
方案一:通过Gradle任务生成共享的Kotlin常量类
这是最直接且无需依赖第三方的方案,核心思路是用Gradle自动生成一个包含配置变量的Kotlin类,放在commonMain源码集下,让共享代码直接访问。
- 在build.gradle.kts中定义全局变量
先把需要共享的变量定义在模块级build.gradle.kts的顶部:
val sdkVersion = "1.0.0" val apiBaseUrl = "https://api.example.com" val enableDebugLogging = true
- 添加Gradle任务生成BuildConfig.kt
在同一个build.gradle.kts中注册生成代码的任务,并让编译任务依赖它:
tasks.register("generateBuildConfig") { // 指定生成文件的输出目录,要和你的项目包名对应 val outputDir = file("src/commonMain/kotlin/com/yourcompany/your-sdk") outputs.dir(outputDir) doLast { // 创建目录(如果不存在) outputDir.mkdirs() val buildConfigFile = outputDir.resolve("BuildConfig.kt") // 写入常量类代码 buildConfigFile.writeText(""" package com.yourcompany.your-sdk object BuildConfig { const val SDK_VERSION = "$sdkVersion" const val API_BASE_URL = "$apiBaseUrl" const val ENABLE_DEBUG_LOGGING = $enableDebugLogging } """.trimIndent()) } } // 让common模块的编译任务依赖这个生成任务 tasks.named("compileKotlinCommon") { dependsOn("generateBuildConfig") }
- 在共享代码中直接使用
同步Gradle后,就能在commonMain的任意代码中导入并访问这些变量:
import com.yourcompany.your.sdk.BuildConfig fun printSdkInfo() { println("SDK Version: ${BuildConfig.SDK_VERSION}") println("API URL: ${BuildConfig.API_BASE_URL}") }
同步Android端的BuildConfig(可选)
如果你需要Android原生代码也能访问这些变量,可以在android块中同步生成Android的BuildConfig:
android { buildTypes { listOf("debug", "release").forEach { buildType -> getByName(buildType) { buildConfigField("String", "SDK_VERSION", "\"$sdkVersion\"") buildConfigField("String", "API_BASE_URL", "\"$apiBaseUrl\"") buildConfigField("boolean", "ENABLE_DEBUG_LOGGING", "$enableDebugLogging") } } } }
注意事项
- 变量类型要对应:字符串需要包裹双引号,布尔/数字直接写值即可
- 输出目录的包名必须和你的项目结构一致,否则会出现导入错误
- 如果变量需要根据构建类型动态变化,可以把变量和buildType关联,比如
val apiBaseUrl = if (buildType.name == "debug") "https://dev.api.example.com" else "https://api.example.com"
内容的提问来源于stack exchange,提问作者amadeus
相关产品推荐
相关产品推荐

