[TIL-230513] 키 값을 안전하게 - Secrets Gradle plugin

반응형

안녕하세요

이전에 작성하였던 Google Maps API 사용 법 중 추가 공부해 본것이 있어 공유해봅니다.

 

[TIL-230512] Google Map Api 적용하기

문득 회사에서 하는 개발에 지겨움(?)을 느끼고 있을 때쯤, TIL(Today I Learned)라는 용어를 알게 되어, 간단한 앱 제작을 목표로 TIL을 작성하게 되었습니다. 오늘 첫 글로 Google Maps API를 Android Project에

weirddev.tistory.com

 

위의 포스팅 중 아래의 내용으로 작성한 부분이 권장하는 방법은 아닌 것으로 보여집니다.
물론 테스트 코드에서는 잘 되긴 했습니다.

<application
...
>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="<<YOUR_API_KEY>>" />

</application>

 

하지만, Google에서는 Git과 같은 Version Control에 API Key를 저장하지말 것을 권장하고 있고, 그 대신에 프로젝트 내에 존재하는 local.properties 파일에 선언하고 Secrets Gradle Plugin으로 Key를 읽을 것을 소개하고 있습니다.

 

Secrets Gradle Plugin

Secrets Gradle Plugin은 APK Key 값과 같이 노출하지 않아야 하는 값을 Version Control에 반영되어있지 않는 로컬 속성 파일에서 키 값을 읽습니다. 

 

읽은 값은 빌드시 생성되는 BuildConfig 클래스 및 AndroidManifest 파일에 변수로 사용할 수 있게 합니다.

 

사용 방법은 아래와 같습니다.


1. Gradle 파일에 선언

1. 프로젝트의 Root 디텍토리에 있는 settings.gradle 파일에 아래와 같이 선언되어있는지 확인합니다. 저는 새로 프로젝트를 만들었기 때문에 그대로 작성되어있었네요

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

 

2. 프로젝트의 build.gradle에 아래와 같이 종속성을 추가합니다.

plugins {
    // ...
    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
}

 

3. module(app)의 build.gradle 파일에도 아래와 같이 종속성을 추가합니다. 이후 Sync Gradle 진행합니다.

plugins {
    ..
    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}

 

2. 로컬 파일로 새로 선언

 

1. 위에 언급했던 local.properties 파일에 API Key 값을 선언합니다.

MAPS_API_KEY="YOUR_API_KEY"

 

2. 기존에 AndroidManifest.xml 파일에 API key를 선언했던 부분을 위의 변수로 변경합니다.

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="${MAPS_API_KEY}" />

 

반응형

* 추가

Secrets Gradle Plugin에서 참조하는 기본 파일을 local.properties 입니다만, 다른 파일에 저장하여 읽기 위해서는 프로젝트 레벨의 build.gradle 파일에 아래와 같이 추가합니다.


예시

secrets {
    // 다른 파일에 추가하여 사용하기 위해서는 아래와 같이 파일명을 선언합니다.
    propertiesFileName = "secrets.properties"

    // 기본 값을 포함하는 속성파일
    defaultPropertiesFileName = 'local.defaults.properties'

    // 제외해야 하는 키를 선언합니다. 정규식으로 필터링합니다.
    // "sdk.dir" 기본적으로 제외합니다.
    ignoreList.add("keyToIgnore") // Ignore the key "keyToIgnore"
    ignoreList.add("sdk.*")       // Ignore all keys matching the regexp "sdk.*"
}

*sdk.dir은 프로젝트에서 사용하는 Android SDK 경로입니다. 기본적으로 작성되어있고, 외부에서 사용하지 않기에 기본적으로 제외됩니다.

 


API Key를 직접 작성하지 않고, 다른 파일에 작성 후 읽는 방법으로 사용하는 Secrets Gradle Plugin에 대해 정리해보았습니다. 

 

잘못된 내용이 있다면 댓글 부탁드리고, 내용이 좋았다면 공감, 구독 부탁드려요!

반응형