簡介

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
    }
}

...

Reference

Android 如何從 local.properties, build.gradle 讀取定義的屬性

Read value from local.properties via Kotlin DSL

Last modified: 2025 年 7 月 16 日

Author

Comments

Write a Reply or Comment

Your email address will not be published.