API키를 그대로 노출시켜 깃허브에 올려두면 메일이 하나 날라올 것이다.
API키가 노출됐다고 경고하는 메일이다.
그래서 API키를 깃허브에 올라가는 코드에서 숨겨야 하는데, 요즘 안드로이드 스튜디오에서 Kotlin DSL 방식으로 build.gralde 파일을 만들기 권장하면서 Kotlin DSL 방식에선 어떻게 API키를 숨기고 불러오는지 알아보자.
구글맵 키는 AndroidManifest.xml에서 카카오는 코틀린 코드에서 사용할 생각이다.
먼저 코틀린 코드에서 사용할 카카오 API Key부터 설정해보자
build.gradle에 androdi {} 블록이 있는데 해당 블록 외부에 getApiKey 함수를 작성해준다.
그리고 defaultConfig {} 블록에 작성한 함수를 이용하여 카카오 키를 가져온다.
마지막으로 buildFeatures {} 블록에 buildConfig = true로 설정해 주면 된다.
다른 코드를 지우고 보기 좋게 필요한 코드만 남기면
android {
defaultConfig {
buildConfigField("String", "Kakao_API_KEY", getApiKey("Kakao_API_KEY"))
}
buildFeatures {
buildConfig = true
}
}
fun getApiKey(propertyKey: String): String {
return gradleLocalProperties(rootDir).getProperty(propertyKey)
}
이렇게 작성할 수 있겠다.
그리고 api키가 필요한 순간에
val kakaoApiKey = BuildConfig.Kakao_API_KEY
로 불러서 사용할 수 있다.
먼저 android {} 블록 외부에 properties 객체를 생성해줘야한다.
그리고 defaultConfig {} 블록 안에 manifestPlaceholders MutablMap에 키와 값을 넣어주면 된다.
마찬가지로 다른 코드들을 지우고 확인해 보면
val properties = Properties()
properties.load(project.rootProject.file("local.properties").inputStream())
android {
defaultConfig {
manifestPlaceholders["GOOGLE_MAP_API_KEY"] = project.properties["GOOGLE_MAP_API_KEY"].toString()
}
}
로 확인할 수 있다.
그리고 Manifest.xml에서 applicaiton 태그 안에
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${GOOGLE_MAP_API_KEY}" />
로 기존에 박아두었던 API키를 빼고 위와 같이 넣어주면 된다.