만족

[Android] BuildConfig.DEBUG가 릴리즈 모드에서도 true가 되는 현상 본문

[Android] BuildConfig.DEBUG가 릴리즈 모드에서도 true가 되는 현상

FrontEnd/Android Satisfaction 2020. 9. 11. 05:28

앱을 개발하다 보면 디버그 모드에서만 활성화해야 하는 기능이 존재한다.

 

단적인 예로, 구글 애드몹의 경우 디버그 모드에서 광고를 초기화하는 행위가 누적되면 계정이 정지되기 때문에 디버그 모드에선 그것을 막아두어야 한다.

 

처음엔 노가다로 디버그 할 때는 주석처리 해두었다가 릴리즈 시 해당 주석을 해제하는 방법을 사용했지만,

BuildConfig클래스를 안 뒤로는 손으로 하지 않는다.

 

BuildConfig는 <applicationId>.BuildConfig 위치에 존재한다.

 

만약 내 applicationId가 com.example.www 라면 com.example.www.BuildConfig 위치에 있다.

 

해당 클래스로 버전 코드, 디버그 여부 등을 유용하게 쓰고 있었는데 간혹 릴리즈 모드에서도 DEBUG값이 false로 바뀌지 않는 문제가 발생하였다. 

 

위 코드는 광고 프래그먼트의 일부인데 DEBUG값이 true로 고정되어버리면 광고는 항상 표시되지 않게 된다.

 

이 외에도 문제가 좀 심각한데...

개발용에서 값 확인을 위해 띄우는 Toast 메시지 등이 릴리즈 모드에서도 다 떠버린 데다

개발용 서버가 꽂힌 상태로 릴리즈 되버렸다.

 

stackoverflow.com/questions/9855834/when-does-adt-set-buildconfig-debug-to-false

 

When does ADT set BuildConfig.DEBUG to false?

In the newest version of ADT (r17) a generated constant was added BuildConfig.DEBUG that is set according to the build type. The problem I have is that it is never set to false, I expected it to ch...

stackoverflow.com

찾아보니 2012년에 문제가 처음 제기되었는데 현 시간 기준 최신 버전의 gradle을 사용하고 있는 데도 같은 문제가 발생하는 걸 보면 고질적인 문제인 것 같다...

 

해결법은 다음과 같다.

 

buildTypes {
    debug {
        buildConfigField "Boolean", "DEBUG_MODE", "true"
    }
    release {
        buildConfigField "Boolean", "DEBUG_MODE", "false"
    }
}

app레벨의 build.gradle에 다음을 추가한다.

 

이것의 의미는 위의 BuildConfig클래스에

디버그 모드 빌드일 떄는 public static final DEBUG_MODE= true 를 추가하고

릴리즈 모드 빌드일 떄는 public static final DEBUG_MODE= false 를 추가한다.

 

금방 발견해서 처리했으나... 좀 짜증은 난다...

 

두 번째 해결법으로는

빌드 폴더를 싹 밀어버리고 다시 빌드하는 방법인데, 매번 하기엔 너무 귀찮으므로 첫 번째 방법을 추천한다.



Comments