Android/BuildConfig

[Android] local.properties로 API Key 관리하기

O_Gyong 2024. 3. 13.

프로젝트 관리를 위해 Git과 같은 형상관리 툴을 사용할 경우 API Key가 노출될 수 있음을 고려해야 한다.

 

안드로이드에서는 한 가지 방법으로 gitignore에 등록된 local.properties를 사용한다. local.properties에 API Key를 저장하고, 앱의 빌드 정보에 키 값을 추가하여 BuildConfig로 코드 상에서 접근할 수 있다.


 

/**
 * local.properties
 */
API_KEY_1 = "89sdfsbsn815832jdsfkjedv"
API_KEY_2 = "04kjcasvbcxzv632jbvzj35f"
API_KEY_3 = "cbfhb518gfa0h52ngf=4ynb3"

 

예시를 위한 임시 키 값을 만든다.

/**
 * build.gradle
 */
android {
    ...
    
    buildFeatures {
        buildConfig = true
    }
}

bulidFeatures 블록에서 buildConfig를 true로 설정하면 안드로이드 빌드 시스템이 BuildConfig 클래스를 생성한다.


/**
 * build.gradle
 */
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties

android {
	...
    defaultConfig {
    	...
        
        // 1
        buildConfigField(
            "String",
            "API_KEY_1",
            gradleLocalProperties(rootDir).getProperty("API_KEY_1") ?: ""
        )
		
        // 2
        fun key(pKey:String): String = gradleLocalProperties(rootDir).getProperty(pKey) ?: ""
        buildConfigField("String", "API_KEY_2", key("API_KEY_2"))
		
        // 3
        manifestPlaceholders["API_KEY_3"] = key("API_KEY_3")
    }
}

buildConfigField를 사용하면 해당 값들이 BuildConfig 클래스에 추가된다.

BuildConfig에 등록할 키 값이 많을 경우 함수를 만들어서 '2'와 '3'처럼 사용해도 된다.

 

'3'에서 사용한 manifestPlaceholders는 AndroidManifest에 값을 삽입할 수 있다.

/*
 * ActivityManifest
 */
<meta-data
    android:name="AppKey"
    android:value="${APP_KEY_3}"/>

println(BuildConfig.API_KEY_1)
println(BuildConfig.API_KEY_2)

코드 상에서 Key 값을 사용할 때 위 처럼 호출하면 된다.

 

전체 코드

댓글