ADT 버전이 낮았을 때는 Proguard를 적용하는게 까다로웠던 것 같은데,

최근에 다시 적용해보려고 하니 Proguard를 적용하는게 굉장히 간단해졌다.

일반적으로 Proguard에서 제외되어야 하는 부분들이 많이 자동화된 것 같다.

 

1. Android Project에 Proguard 적용하기.

project.properties 파일의 proguard.config 옵션을 주석 해제하면, release mode로 build시에 자동으로 proguard를 적용한다.  (proguard.config는 Default로 주석처리되어 있다.)

 

2. proguard 정상적으로 적용되었는지 확인.

release build시 Proguard가 정상적으로 적용되었으면, Project 폴더에 proguard 폴더가 생성되고, 4개의 파일이 추가된다. 추가되는 파일들은 아래와 같다.

 

  • dump.txtDescribes the internal structure of all the class files in the .apk file
  • mapping.txtLists the mapping between the original and obfuscated class, method, and field names. This file is important when you receive a bug report from a release build, because it translates the obfuscated stack trace back to the original class, method, and member names. See Decoding Obfuscated Stack Traces for more information.
  • seeds.txt : Lists the classes and members that are not obfuscated
  • usage.txt : Lists the code that was stripped from the .apk

만약 proguard를 적용하여 빌드하는 과정에서 문제가 발생했다면 “Proguard returned with error code 1. see console”과 같은 에러 메시지와 함께 Alert Dialog가 나온다. Console에 출력된 에러 메시지를 확인하여 수정 후 다시 빌드해야 한다.  정상적으로 빌드가 됐다면 반드시 단말에 설치해서 확인해봐야 하고 이전 버전과 호환에 문제가 없는지도 같이 확인되어야 한다.

 

3. proguard 적용시 자주 사용하는 옵션.

proguard가 정상적으로 적용되었는지 확인하기 위해서는 생성한 .apk 파일을 압축을 해제한 뒤, classes.dex 파일을 dex2jar 혹은 다른 프로그램을 이용해서 jar로 변경한 뒤, Jar Viewer를 통해 확인하면 된다.

오류없이 Proguard를 적용하기 위해서는 세심한 주의와 많은 테스트가 뒷받침되어야 한다. Project의 규모가 커질수록, 사용하는 Third Party Library가 많을 수록, Proguard를 문제없이 적용하는데는 더 많은 주의와 테스트가 필요하다.

 

* Proguard 적용시에 자주 문제가 되는 부분.

  1. addJavascriptInterface를 통해 WebView에 추가한 기능.
  2. 외부에서 import한 library.
  3. Google Map 2.0 사용시 : http://blog.naver.com/PostView.nhn?blogId=hara9&logNo=10164311346
  4. AndroidManifest에서 참조하고 있는 Class Name.
  5. JNI 연동 부분.

 

* References.

proguard guidehttp://developer.android.com/tools/help/proguard.html

proguard 적용 가이드http://ocular.tistory.com/39

dex2jarhttps://code.google.com/p/dex2jar/

jarzillahttps://code.google.com/p/jarzilla/