안드로이드 Api key 숨기고 안전하게 관리하기

임현주·2022년 9월 7일
2
post-thumbnail

오픈 api 를 사용한 프로젝트들을 깃허브 올리다보면 '근데 이거 api key 노출 해도 괜찮나?' 하고 의문을 가지게 될 것이다.

사실 알잖아요, 괜찮지 않다는 것 😂😭 !!!!! 혹시 나의 api key 를 악용하는 사람이 나타난다면...? 우리의 서비스도, 개인정보도, Money 💸 도 공중분해 될 수 있다 ... (´༎ຶД༎ຶ`)

하지만 이제는 아니다. 우리는 gradle을 사용해 안전하게 관리할 것이기 때문에 😤 !!

1. local.properties에 key 값을 정의한다.

🙋🏻‍♀️ local.properties 이라고 노출을 막을 수 있는거 맞나요?

➡️ 보통 gitignore(git에 올리고 싶지 않은 파일이나 폴더를 정의) 파일에 local.properties 가 기본으로 정의되어 있기 때문에 괜찮지만, 혹시 모르니 한 번 확인하는 것을 권장한다.

2. build.gradle(Module:app)에 사용할 key 변수를 선언한다.

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    ...
}

// 선언 및 key 값 가져오기
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

android {
    ...
   
    buildTypes {
        debug {
            resValue "string", "GOOGLE_MAP_API_KEY", properties["GOOGLE_MAP_API_KEY"]
            buildConfigField "String", "GOOGLE_MAP_API_KEY", properties["GOOGLE_MAP_API_KEY"]
        }

        release {
        	minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            
            resValue "string", "GOOGLE_MAP_API_KEY", properties["GOOGLE_MAP_API_KEY"]
            buildConfigField "String", "GOOGLE_MAP_API_KEY", properties["GOOGLE_MAP_API_KEY"]
        }
    }
}

debug, release 모드에 따라 각각 설정할 수 있다.

buildConfigField

  • 선언
buildConfigField "타입", "만들 변수명", properties["local.properties에 설정한 변수명"]
  • 호출 방법
val key = BuildConfig.GOOGLE_MAP_API_KEY

buildConfigField로 정의한 key는 BuildConfig 에 저장되어 프로젝트 내에서 언제든 사용할 수 있다.

resValue

  • 선언
resValue ("타입", "만들 변수명", properties["local.properties에 설정한 변수명"])
  • 호출 방법
<meta-data
    android:name="..."
    android:value="@string/GOOGLE_MAP_API_KEY" />

resValue로 정의한 key는 xml 에서 사용할 수 있다.

❗️ 여기서 주의할 점은 타입을 선언할 때 소문자로 해주어야한다는 것 !
예를 들어, string을 String으로 선언하면 resources가 item으로 선언되어버린다.

✅ gradle 'Sync Now' 를 해준 후, 확인 해야 할 것

buildConfigField 로 선언한 경우

BuildConfig.java 파일에 해당 key가 잘 선언 됐는지,
프로젝트 코드 내에서 확.실.히 해당 파일이 import 되어 호출 된 것이 맞는지 확인해야 한다.

resValue 로 선언한 경우

마찬가지로 gradleResValues.xml 파일에 해당 key가 잘 선언되어 있는지 확인한다.

🚨 혹시 이런 문제를 겪고 있다면?

  • gradle에서 제대로 선언한 것 같은데 BuildConfig.java 파일이 없어요 😭
  • BuildConfig.java 파일만 있고 생성된 key가 없어요 🙃

[Build] - [Rebuild Project] 를 실행 한 뒤 (혹은 [Build] - [Clean Project] 후 재실행),
다시 해당 파일들을 확인해보자!

profile
🐰 피드백은 언제나 환영합니다

0개의 댓글