어플을 만들 때면은 민감한 정보가 소스 코드에 포함되는 경우가 있다. 예를 들어 API 키 값을 소스 코드에 그대로 포함하면 보안상의 문제가 있다. 이를 해결하기 위한 방법 중 하나로 local.properties를 사용하는 방법이 있다.
local.properties 파일이 만약 없다면 프로젝트 최상위 루트 폴더에 local.properties를 만들고 다음 내용을 적어주자.
sdk.dir=C\:\\Users\\USER_NAME\\AppData\\Local\\Android\\Sdk
api.key="API키 값"
USER_NAME에는 자신의 사용자 이름을 적으면 되고 밑에 저장할 값을 적으면 된다.
app 수준의 build.gradle 파일에 가서 android 위에 다음 내용을 추가해주자.
def Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
위에서 작성한 local.properties 파일을 properties에 로드해주는 작업이다. 여기서 두 가지 방법이 있다.
resValue("string", "YOUR_KEY", properties.getProperty("api.key"))
위는 앱 리소스 값에 추가해주는 방법이다.
buildConfigField("String", "YOUR_KEY", properties.getProperty("api.key"))
위는 BuildConfig에 추가해주는 방법이다.
두 메소드 전부 두번째 인자에 저장할 이름, 세번째 인자에 저장할 값을 넣어주면 된다.
API_KEY = getApplicationContext().getResources().getString(R.string.YOUR_KEY);
ResValue에 저장한 값의 경우 다음과 같이 사용할 수 있다. getResource 앞에는 반드시 Context 객체가 와야한다.
API_KEY = BuildConfig.YOUR_KEY;
BuildConfig에 저장할 경우 다음과 같이 사용할 수 있다.
위의 두 방법은 모두 /build 디렉토리 아래에 생겨 .gitignore 의 대상이므로, git에 올릴 때 민감한 정보를 노출시키지 않을 수 있다는 장점이 있다.
2번 이후로 sync now를 할 경우, gradle의 버전을 변경하라는 에러 메세지가 뜰 경우가 있는데, 이는 gradle/wrapper/gradle-wrapper.properties에 다음 내용을 추가해주면 된다.
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
6.5 부분에 원하는 버전을 적으면 된다. 이 파일 또한 없으면 생성해서 적어주자.
Android developers, "Gradle 도움말 및 레시피", https://developer.android.com/studio/build/gradle-tips