프로젝트 관리를 위해 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 값을 사용할 때 위 처럼 호출하면 된다.
댓글