지난 세미나에서 나온 질문 중, 자바에서 전처리기 사용하기에 대해 저도 궁금해서 찾아보니 방법이 있더군요.
일단 링크를 걸어놓을게요.
위 방법 외에 Antenna plug-in을 설치하는 방법도 있습니다.
http://antenna.sourceforge.net/
.
지난 세미나에서 나온 질문 중, 자바에서 전처리기 사용하기에 대해 저도 궁금해서 찾아보니 방법이 있더군요.
일단 링크를 걸어놓을게요.
위 방법 외에 Antenna plug-in을 설치하는 방법도 있습니다.
http://antenna.sourceforge.net/
.
예전에 필요해서 세미나 시간에 질문 던져놓고 해결 방법은 못 올렸습니다. 결국엔 갑자기 필요해지지 않아서 아직 구현은 해 놓지 않았습니다.
올려주신 방법도 참 유용한 방법인데 제 경우엔 안드로이드 프레임워크단이고, ant 아닌 android용 make라서 위에 방법으로는 할 수가 없었습니다.
그래서 제가 쓴 방법은,
자바 단에서
public static final boolean TARGET_PRODUCT = flase;
로 정의하고,
분기컴파일이 필요한 부분에 가서
if (TARGET_PRODUCT) {
// 코드 내용, 이 부분은 컴파일할때 사라집니다.
}
그리고 해당 make 파일에서 해당 product에 따라 간단히 awk 나 sed로 저기 fasle 부분만 바꿔주는 경우로 하면 됩니다. 자바도 컴파일할때 최적화를 하는 걸로 알고 있습니다. 그래서 저렇게 절대로 실행이 안되는 부분(상기 TARGET_PRODUCT이 적용 안되는 경우) 컴파일 할 때 생략합니다.
원래는 안드로이드에서 쓰는 property_get() (system/core/include/cutils/properties.h 에 정의)를 product에 맞는 프로퍼티를 설정해 놓고 거기에 맞게 쓸까 했는데, 이러면 전처리기라기보단 그냥 분기실행 같기도 하고, 프로퍼티를 저런 식으로 써도 되는지 몰라서 안했습니다.
이 방법에 문제라면 product종류가 2개 이상이면 조금 복잡해지는거 같습니다. 안드로이드가 아닌 그냥 자바라면 디펜던시 인젝션 하는 방법으로 하면 간단히 해결 되는 걸로 알고 있습니다.(이 부분은 해당업무가 바뀌면 올리겠습니다 ㅎㅎ)