티스토리 뷰

이번 포스팅에서는 앱 개발을 하면서 한 번씩은 꼭 필요한 properties에서 값을 읽어오는 방법을 정리하려고 한다.

사실 이 기능이 필요할 때 종종 방법을 잊어버리기 때문에 검색하지 않고 한 번에 찾기 위함이다..

 


 

개발을 하면서 API key와 같이 외부로 유출되면 안되는 정보를 코드에 넣어야 하는 경우가 있다.

특히 이런 코드를 GitHub에 올리려고 하면 곤란해지는데 이런 경우에는 그 정보를 직접 코드에 넣는것 보다는 따로 .properties 파일로 빼서 사용하면 좋다.

예를 들어 apikey.properties 라는 파일을 만들어서 프로젝트 루트 디렉토리에 넣어두고 .gitignore 파일에 추가하면 key 값이 외부에 노출될 걱정도 없고, key 값들을 하나의 파일에서 관리할 수 있어 좋다.

 

apikey.properties 파일
.gitignore 파일 일부

 

그렇다면 이 값들을 코드에서 사용하기 위해서는 어떻게 해야할까?

먼저, app 모듈의 build.gradle 파일에 아래처럼 코드를 추가하면 된다.

한 번의 선언으로 java 파일과 xml 파일 둘 다 사용할 수 있으면 좋겠지만 안드로이드에서는 java 파일과 xml 파일에 대한 properties 값을 아래 코드 처럼 각각 따로 선언해 주어야 한다.

def apiKeyPropertiesFile = rootProject.file("apikey.properties")
def apiKeyProperties = new Properties()
apiKeyProperties.load(new FileInputStream(apiKeyPropertiesFile))

android {
    ...
    defaultConfig {
        ...
        // xml file
        resValue "string", "CLIENT_ID", apiKeyProperties['CLIENT_ID']
        resValue "string", "CLIENT_SECRET", apiKeyProperties['CLIENT_SECRET']

        // java file
        buildConfigField("String", "CLIENT_ID", apiKeyProperties['CLIENT_ID'])
        buildConfigField("String", "CLIENT_SECRET", apiKeyProperties['CLIENT_SECRET'])
    }
}

 

resValue는 manifest 파일과 같은 xml 파일에서 properties 값을 사용하고 싶을 때 resValue로 선언하면 Build 시점에 build/generated 하위 폴더에 gradleResValues.xml 파일이 아래와 같이 생성된다.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Automatically generated file. DO NOT MODIFY -->

    <!-- Values from default config. -->
    <string name="CLIENT_ID" translatable="false">"Your_Client_Id"</string>
    <string name="CLIENT_SECRET" translatable="false">"Your_Client_Secret"</string>

</resources>

 

사용 예시)

<meta-data
    android:name="..."
    android:value="@string/CLIENT_ID" />

 

buildConfigField를 선언하면 아래와 같이 BuildConfig 클래스에 자동으로 값들이 생겨 java 파일에서 “BuildConfig.CLIENT_ID”로 접근할 수 있다.

public final class BuildConfig {
    ...  
    // Fields from default config.
    public static final String CLIENT_ID = "Your_Client_Id";
    public static final String CLIENT_SECRET = "Your_Client_Secret";
}

 

사용 예시)

String clientId = BuildConfig.CLIENT_ID;

 

 

이 BuildConfig와 resValue 파일은 generated 파일로 /build 디렉토리 아래에 생기기 때문에 .gitignore 대상이 된다.

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함