안드로이드의 여러 라이브러리를 사용하다보면,

단순히 디버깅을 위해 앱을 빌드할 때 조차도,

메소드 카운트가 6.5K를 넘기는 경우가 발생하게 되는데요.

 

이때 안드로이드 스튜디오가 알려주는데로 무심코 MultiDex를 사용하는 것 보다는,

디버깅할 때에도 사용하지 않는 메소드를 줄여주는 minify과정을 통해서

Multidex를 사용하지 않도록 해야하는 것을 먼저 시도해 보아야 합니다.

그렇게 해도 해결이 않될정도로 앱이 거대하고 큰 규모라면 Multidex를 사용해야 할 테구요.

 

문제는 minify(리소스를 축소)를 하는 과정에서 난독화도 같이 하게 되면서

테스트를 위한 빌드를 하는데도 엄청난 시간이 걸릴 수 있는 것 인데요.

이는 개발동기 저하와 생산성하락으로 이어질 테구요.

 

오늘은 이를 어떻게 해결해야 하는지 정리해 보도록 하겠습니다.

 

1. 디버깅시 Proguard설정

일반적으로 Proguard를 사용해 Minify를 하는 경우 아래와 같이 설정하고,

proguard-rules.pro파일에 난독화 규칙이나 옵션등을 적어 놓았을 것인데요.

 

이번에는 디버깅시에만 쓰지않는 메소드 카운트수를 줄이면서도,

빌드타임이 많이 걸리는 난독화 과정을 거치지 않기 위해서,

설정을 아래와 같이 추가해 주어야 합니다.

복잡해 보이지만 useProguard를 false로 해주기만 하면 되는 것이어서 매우 쉽습니다.

이렇게 하면 minifyEnable를 통해서 사용하지 리소스를 축소시키면서도 난독화를 하지 않게 됩니다.

 

 

 

물론 이렇게 한다고 해서, minify를 하기 이전과 같은 속도를 보여주지는 못합니다.

다만 난독화를 하는 것보다는 몇 배 빠르므로 이러한 방법을 통해서 해결할 수 밖에 없는 것이지요.

 

참고로 useProguard를 사용하고 있지만,

R8이 Proguard 를 대체하고 있는 현 상황에서 useR8같은 이름으로 추후에 바뀔지도 모르겠네요.

그정도가 된다면 proguard-rules라는 파일이름도 r8-rules같은 이름으로 바뀔수 있을것 같구요.

차후에 그러한 업데이트가 발생한다면 이 글도 수정하도록 하겠습니다.

 

그리고 추가적으로 위와 같은 방법을 사용하지 않고,

debug용proguardFile(proguard-debug.pro)을 추가해서 난독화 옵션을 끄는 방법도 있기는 하지만,

위 방법이 훨씬 적용도 쉽고 간단해서 이 글에서는 다루지 않았네요.

 

2. 정리

Multidex를 무조건 피할 수는 없겠지만, 가능하다면 위와 같은 방법을 사용해서 

디버깅시에는 minify, Release시에는 minify + 난독화를 하여서,

개발속도를 효율적으로 할 수 있도록 해야겠습니다.

추후 좀더 좋은 방법이 있다면 이 글을 통해서 업데이트 하도록 하겠습니다.

+ Recent posts