[Android] preprocessor(전처리기) 흉내내기

2022. 8. 1. 16:23IT관련

반응형

build.gradle

디버깅과 릴리즈시 변수의 값을 다르게 가져가고 싶을때 C/C++ preprocessor로 처리하면 편한데, java는 기본적으로 preprocessor를 지원하지 않는다.

하지만 비슷하게 gradle의 build type에 따라 변수의 값을 바꿔줄 수 있는 기능이 있어 소개한다.

 

gradle은 android studio용 빌드 툴키이라고 설명되어 있는데, 뭐 그냥 android studio용 makefile이라고 보면 될 것 같다.

자세한 내용은 Android developer를 참고할 것.

 

build.gradle에 buildConfigField를 추가했다.

buildTypes {
    release {
        ......
        buildConfigField "String", "SOME_KEY", '"xxxxxx"'
    }
    debug {
        ......
        buildConfigField "String", "SOME_KEY", '"yyyyyyy"'
    }
}

위 의미는 release 빌드시 BuildConfig.java에 아래와 같이 변수가 추가된다.

// Field from build type: release
public static final String SOME_KEY = "xxxxxx";

debug 시에는 당연히 아래와 같이 될 것이다.

// Field from build type: debug
public static final String SOME_KEY = "yyyyyyy";

 

정리하면 C의 preprocessor로 아래와 같이 표현할 것을 gradle를 이용하여 android에 적용한 거라고 이해 하면 될 것 같다.

#if _DEBUG
    public static final String SOME_KEY = "yyyyyyy";
#else
    public static final String SOME_KEY = "xxxxxxx";
#endif

 

Android에서 build type은 Build > Select Build Variants에서 변경 가능하다.

Build Variants

 

BuildConfig에 변수로 추가하는거 외에 리소스에도 추가 가능하다. 이번엔 buildConfigField 말고 resValue라는 것을 사용한다.

buildTypes {
    release {
        resValue "string", "app_type1", "릴리즈"
    }
    debug {
        resValue "string", "app_type1", "테스트1"
    }
}

Build를 하면 app_type1이라는 String 리소스가 gradleResValue.xml 파일에 자동으로 추가된다.

gradleResValues.xml

이제 layout xml에서 사용할 수 있다.
<TextView
    android:text="@string/app_type1" />
/>
 

뭐든 편한걸로 하자.

반응형

'IT관련' 카테고리의 다른 글

Openproject with Docker  (0) 2022.12.19
Ubuntu Service 등록  (0) 2022.12.19
라즈베리파이에 pyenv 설치  (0) 2022.02.04
부팅시 flask 웹서버 구동  (0) 2021.12.02
pyenv로 python 3.10.0 설치시 필요한 추가 라이브러리  (0) 2021.12.01