You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin多平台项目:如何在公共代码中访问构建变量

在Kotlin多平台SDK中实现跨平台的BuildConfig式变量共享

方案一:通过Gradle任务生成共享的Kotlin常量类

这是最直接且无需依赖第三方的方案,核心思路是用Gradle自动生成一个包含配置变量的Kotlin类,放在commonMain源码集下,让共享代码直接访问。

  1. 在build.gradle.kts中定义全局变量
    先把需要共享的变量定义在模块级build.gradle.kts的顶部:
val sdkVersion = "1.0.0"
val apiBaseUrl = "https://api.example.com"
val enableDebugLogging = true
  1. 添加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")
}
  1. 在共享代码中直接使用
    同步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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:20:32