Hyun Chul's Utopia

Android 빌드시 Proguard에서 Log 출력 제거시 발생하는 문제점. assumenosideeffects 본문

프로그래밍/Android

Android 빌드시 Proguard에서 Log 출력 제거시 발생하는 문제점. assumenosideeffects

디프시다루핀 2015. 8. 12. 10:30

개발중이던 앱에서 릴리즈로 뽑아내기만 하면.. 백그라운드에서 CPU를 미친듯이 점유하는 문제가 발생하였습니다.

디버그 모드일땐 전혀 문제가 없던데.. 꼭 릴리즈로 빌드하고 나면 그러더군요..

원인을 찾기 위해 여러가지로 삽질 했지만.. 처음부터 Proguard를 확인했더라면 수고가 좀 덜했을걸.. 하더군요.


결론적으로 Proguard에..

-assumenosideeffects class android.util.Log { *; }


위와같이 옵션을 와일드카드로 넣어둔게 화근이었습니다.

해당 옵션으로 인하여 Log클래스 안에 있는 모든 메소드에 대하여 Proguard가 반영이 되게 되는데..

그 과정에서 Object - wait() 메소드가 포함되어 문제가 발생할 수 있다고 합니다.


따라서 Log를 제거하기 위해선 사용될 메소드만 개별적으로 정해두어야 합니다.


-assumenosideeffects class android.util.Log {

    public static int v (...);

    public static int d (...);

    public static int i (...);

    public static int w (...);

    public static int e (...);

    public static int wtf (...);

}


이런식으로 말이죠..


누군가 또 이런 문제로 삽질하는 일이 없기를 바라며 간단히 적어 보았습니다.


참고자료

- http://qiita.com/gfx/items/e412dab7f127b7ae44d8

- https://github.com/gfx/ProguardRemovesObjectWait

- http://stackoverflow.com/questions/12390466/android-proguard-not-removing-all-log-messages

Comments