簡介
BuildConfig 這個功能,可以讓我們針對不同的階段(如:release, debug…) 來設定不同的變數。
常用於 LOG_DEBUG 及 BASE_URL
注意事項
新版的 AGP 把 BuildConfig 的預設值改為 false (也就是預設不開啟這個功能),所以我們得先將這個功能啟用
android {
...
buildFeatures {
...
buildConfig = true
}
}
程式碼範例
UseCase 1: 設定 BASE_URL
通常我們在開發階段和正式使用會使用不同的 API 伺服器,我們可以利用 BuildConfig 來讓我們方便切換
build.gradle.kt (:app)
plugins {
...
alias(libs.plugins.kotlin.serialization)
}
android {
...
buildTypes {
release {
...
buildConfigField("Boolean", "LOG_DEBUG", "false")
buildConfigField("String", "BASE_URL", "\"https://api.kirin.app/api/v1/version\"")
}
debug {
buildConfigField("Boolean", "LOG_DEBUG", "true")
buildConfigField("String", "BASE_URL", "\"https://apidemo.kirin.app/api/v1/version\"")
}
}
...
buildFeatures {
...
buildConfig = true
}
}
dependencies {
...
implementation(libs.bundles.ktor)
}
要注意字串值的使用方式,必須使用反斜線來跳脫表示雙引號。
UseCase 2: 設定 API KEY
因為 api key 是比較敏感的,我們通常會配合 local.properties 來做,因為 local.properties 不會被 git 追蹤。
local.properties
api_key="AAAAbbbbbccccccdddd"
build.gradle.kts (Module level: app)
...
android {
...
buildTypes {
val apiKey = gradleLocalProperties(rootDir, providers).getProperty("api.key")
release {
...
buildConfigField("String", "API_KEY", "\"$apiKey\"")
}
}
...
buildFeatures {
...
buildConfig = true
}
}
這樣,就可以使用 BuildConfig.API_KEY 來取得 API KEY
...
defaultRequest {
contentType(ContentType.Application.Json)
header("x-api-key", BuildConfig.API_KEY)
}
// 或是
Log.d(TAG, "API_KEY: " + BuildConfig.API_KEY)
問題與解決方式
1、無法使用 BuildConfig
在比較新版本的 AGP ,BuildConfig 的功能預設是不開啟的,所以如果我們要使用這個功能,必須要先設定開啟 buildConfig 功能。方法如下:
...
android {
...
buildFeatures {
...
buildConfig = true
}
}
...
Comments