오픈 api 를 사용한 프로젝트들을 깃허브 올리다보면 '근데 이거 api key 노출 해도 괜찮나?' 하고 의문을 가지게 될 것이다.
사실 알잖아요, 괜찮지 않다는 것 😂😭 !!!!! 혹시 나의 api key 를 악용하는 사람이 나타난다면...? 우리의 서비스도, 개인정보도, Money 💸 도 공중분해 될 수 있다 ... (´༎ຶД༎ຶ`)
하지만 이제는 아니다. 우리는 gradle을 사용해 안전하게 관리할 것이기 때문에 😤 !!
➡️ 보통 gitignore(git에 올리고 싶지 않은 파일이나 폴더를 정의) 파일에 local.properties 가 기본으로 정의되어 있기 때문에 괜찮지만, 혹시 모르니 한 번 확인하는 것을 권장한다.
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 "타입", "만들 변수명", properties["local.properties에 설정한 변수명"]
val key = BuildConfig.GOOGLE_MAP_API_KEY
buildConfigField로 정의한 key는 BuildConfig 에 저장되어 프로젝트 내에서 언제든 사용할 수 있다.
resValue ("타입", "만들 변수명", properties["local.properties에 설정한 변수명"])
<meta-data
android:name="..."
android:value="@string/GOOGLE_MAP_API_KEY" />
resValue로 정의한 key는 xml 에서 사용할 수 있다.
❗️ 여기서 주의할 점은 타입을 선언할 때 소문자로 해주어야한다는 것 !
예를 들어, string을 String으로 선언하면 resources가 item으로 선언되어버린다.
BuildConfig.java
파일에 해당 key가 잘 선언 됐는지,
프로젝트 코드 내에서 확.실.히 해당 파일이 import 되어 호출 된 것이 맞는지 확인해야 한다.
마찬가지로 gradleResValues.xml
파일에 해당 key가 잘 선언되어 있는지 확인한다.
BuildConfig.java
파일이 없어요 😭BuildConfig.java
파일만 있고 생성된 key가 없어요 🙃[Build] - [Rebuild Project] 를 실행 한 뒤 (혹은 [Build] - [Clean Project] 후 재실행),
다시 해당 파일들을 확인해보자!