
개발을 하다 보면 API키를 통해 연동을 하는 경우가 있다. 가령 구글 로그인을 구현하려는 경우가 그렇다.
이때 평소와 같이 API키를 코드상에 하드코딩하거나 string.xml 에 입력 후 불러온다면 어떻게 될까?
로컬에만 작업한다면 문제없겠지만 대부분의 경우 깃을 통해 깃허브에 소스코드를 저장해둘 것이다.
그 코드가 저장된 프로젝트가 공개된 프로젝트라면 누군가 당신의 API키를 볼 수 있고 이를 악용할 우려가 있다.
그래서 우리는 API키를 비롯한 중요한 정보를 숨길 필요가 있다.
우리는 몇가지 간단한 과정을 통해 키를 숨길 수 있다.
local.properties 키 저장 → build.gradle(app) 타입, 키, 값 설정 → 빌드 → 코드에서 사용
gitignore는 말그대로 깃을 무시하는걸로 원치않는 파일이나 폴더를 깃에 담지 않는 것을 말한다.
이 파일은 프로젝트 수준에 존재하며 기본으로 다음과 같이 세팅이 되어있다.

그중에서도 local.properties를 이용해서 Git push를 하더라도 숨기려고하는 키를 올리지않고 로컬에만 저장하는 방법을 알아보자.
여기에 사용할 키를 입력해준다. 예시로 보여주기 위해 스크린샷 키는 랜덤문자를 넣었다.

plugins {
id 'com.android.application'
. . .
}
// 선언 및 키값을 불러오기
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
repositories {
. . .
}
android {
. . .
defaultConfig {
. . .
// 프로젝트에서 사용
// 타입 - 키 - 값
buildConfigField "String", "GOOGLE_API_KEY", properties['google_id_token']
// 매니페스트에서 사용
manifestPlaceholders = [GOOGLE_API_KEY: google_api_key]
}
}
Sync 눌러주고 빌드를 한번 해주자 그러면 BuildConfig에 저장된다.
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.dongyang.android.aob";
public static final String BUILD_TYPE = "debug";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Field from default config.
public static final String GOOGLE_API_KEY = ". . . ";
}
BuildConfig 파일은 위에 gitignore에 적혀있는 build 폴더내에 있기 때문에 원격저장소에 저장되지 않는다.
"${GOOGLE_API_KEY}"와 같이 "${변수}"를 사용해주면 된다.
BuildConfig.GOOGLE_API_KEY 와 같이 BuildConfig.변수 를 사용해주면 된다.
원격 저장소에 저장되지 않으므로 협업 시 값을 공유해주면 된다.
과정이 간단하기 때문에 어려운 점은 없었고 앞으로 키 값은 로컬에만 저장하자
참고 및 출처
API 키 숨기기
좋은 정보 감사합니다!!!