안드로이드에 구글 맵 플랫폼(https://developers.google.com/maps?hl=ko)을 사용하여 지도 기능을 개발하는 경우에는 구글 맵 플랫폼에서 제공하는 키를 관리해야 한다. 해당 키는 민감한 정보로 github과 같은 버전관리시스템에 노출이 되어서는 안된다.
앞서 민감한 키 정보를 local.properties 에 작성하여 버전관리시스템에서는 관리되지 않도록 하고, BuildConfig를 이용하여 키 값을 코드에서 사용하는 방법을 소개한 적이 있다. (2022.08.08 - [IT Domain Knowledge/Android] - [Android] local.properties를 사용하여 키 관리하기 )
구글 맵에서 제공하는 키는 AndroidManifest.xml 파일에 명시를 해야한다. 아래와 같이 meta-data로 작성을 하여 사용한다.
<application
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="여기에 키를 작성해 주세요." />
...
</application>
하지만 AndroidManifest.xml에 키를 직접 입력하는 방식을 키 유출의 위험성이 있다. 따라서 키가 유출되지 않고 사용하는 2가지 방법을 제시한다.
1. secret 플러그인 이용하기.
안드로이드 맵 플랫폼 개발자 페이지에서는 안드로이드 스튜디오에서 프로젝트의 루트 디렉터리에 있는 local.properties 파일에 저장하여 사용하는 방법을 제공한다. (https://developers.google.com/maps/documentation/android-sdk/config?hl=ko) 이 방법은 안드로이드용 Secrets Gradle 플러그인을 사용한다. 플러그인을 설치하여 API 키를 저장하는 방법은 다음과 같다.
1) root 레벨 build.gradle 수정
Android 스튜디오에서 루트 수준 build.gradle 파일을 열고 다음 코드를 buildscript 아래 dependencies 요소에 추가한다.
plugins {
// ...
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
}
2) App 레벨 build.gradle 수정
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
파일을 저장하고 프로젝트를 Gradle과 동기화한다.
3) local.properties에 키 작성
프로젝트 수준 디렉터리에서 local.properties에 키 코드를 추가한다.
MAPS_API_KEY=YOUR_API_KEY
4) AndroidManifest.xml에 키 데이터 추가
<application
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${MAPS_API_KEY}" />
...
</application>
2. App 레벨 build.gradle의 defaultConfig 이용하기
앞서 (2022.08.08 - [IT Domain Knowledge/Android] - [Android] local.properties를 사용하여 키 관리하기) 에서 local.properties에 키를 Properties를 이용하여 가져오는 방법을 사용하였다. 하지만 BuildConfig를 이용하는 방법은 AndroidManifest.xml에 값을 전달할 수 는 없다.
키 값을 전달하기 위해 defaultConfig 에 manifestPlaceholders 기능을 이용한다.
1) local.properties에 키 작성
프로젝트 수준 디렉터리에서 local.properties에 키 코드를 추가한다.
MAPS_API_KEY=YOUR_API_KEY
2) build.gradle에서 키 전달
def localProperties = new Properties()
localProperties.load(new FileInputStream(rootProject.file("local.properties")))
def MAPS_API_KEY=localProperties['MAPS_API_KEY']
android {
...
defaultConfig {
...
manifestPlaceholders = [MAPS_API_KEY:MAPS_API_KEY]
}
...
}
3) AndroidManifest.xml에 키 데이터 추가
<application
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${MAPS_API_KEY}" />
...
</application>
정리
AndroidManifest.xml 파일에 구글 맵 키를 전달하는 2가지 방법을 살펴보았다. 이 중 첫 번째 방법을 구글 맵 플랫폼 개발자 페이지에서 가이드하고 있으므로 그 방법을 사용하자. 만약 AnroidManifest.xml에 구글 맵 키 외에도 다른 민감한 정보를 전달해야 한다면 두 번째 방법을 이용하는 것을 고려해 보자.
'Android > Component' 카테고리의 다른 글
[Android] 하단 탭 사용하기 (BottomNavigation) (0) | 2022.08.31 |
---|---|
[Android] WearOS HealthServicesClient 성능 문제 분석기 (0) | 2022.08.16 |
[Android] local.properties를 사용하여 키 관리하기 (2) | 2022.08.08 |
[Android] 위치(Location) (1) | 2022.07.14 |
[Android Wear] Ambient Mode에서 Display 정보 업데이트하기 (0) | 2022.07.10 |