Proguard는 소스를 난독화하여 디컴파일에 의해 소스코드가 노출되는 것을 방지하기 위해 사용됩니다. Proguard를 적용하면 보안 향상 뿐 아니라 약간의 최적화가 이루어진다고 하니 앱 개발을 완료한 후 꼭 적용하는 것이 좋을 거 같습니다.
최신 ADT에서는 Progaurd를 기본 지원하여 Proguard 적용이 보다 간편해 졌습니다. 최신 ADT가 설치된 Eclipse에서 안드로이드 프로젝트를 생성하면 프로젝트의 루트 폴더에 proguard.cfg와 project.properties 파일이 생성되어있는 것을 확인할 수 있습니다. Progaurd 적용을 위해서는 project.properties 파일안에 아래의 코드 한줄만 추가하면 됩니다.
Proguard의 적용은 일반 컴파일에서는 안되고 Export signed Application Package를 실행해 서명된 apk 파일을 생성할 때만 적용됩니다. Proguard가 정상적으로 적용되게 되면 apk 생성 후 프로젝트안에 proguard 폴더가 만들어지며 그 안에 dump.txt, mapping.txt, seeds.txt, usage.txt 파일들이 생성됩니다.
- dump.txt : 애플리케이션에서 사용중인 클래스들의 내부 구조에 대한 대략적인 정보
- mapping.txt : 난독화 과정에서 기존 클래스 혹은 메서드가 어떤 새로운 난독화된 이름으로 매핑되었는지 그 목록. 난독화된 애플리케이션에 발생하는 로그나, 스택 트레이스 들을 분석하기 위해 필요
- seeds.txt : 난독화되지 않은 클래스와 멤버들의 목록
- usage.txt : 사용되지 않아 apk 파일에서 제거된 코드들의 목록 (proguard.cfg 설정 내용에 따라 적용되지 않는 경우 있음)
여기서 mapping.txt 파일은 난독화된 애플리케이션에서 발생하는 로그, 스택트레이스 등을 분석하기 위해 반드시 필요하므로 잘 보관해 두어야 합니다. 버전 업 후 Proguard 재적용시 새로운 mapping.txt가 덮어쓰여지게 되므로 버전 별로 mapping.txt를 잘 보관해 두어야 할 듯 합니다.
proguard.config=proguard.cfg
Proguard의 적용은 일반 컴파일에서는 안되고 Export signed Application Package를 실행해 서명된 apk 파일을 생성할 때만 적용됩니다. Proguard가 정상적으로 적용되게 되면 apk 생성 후 프로젝트안에 proguard 폴더가 만들어지며 그 안에 dump.txt, mapping.txt, seeds.txt, usage.txt 파일들이 생성됩니다.
- dump.txt : 애플리케이션에서 사용중인 클래스들의 내부 구조에 대한 대략적인 정보
- mapping.txt : 난독화 과정에서 기존 클래스 혹은 메서드가 어떤 새로운 난독화된 이름으로 매핑되었는지 그 목록. 난독화된 애플리케이션에 발생하는 로그나, 스택 트레이스 들을 분석하기 위해 필요
- seeds.txt : 난독화되지 않은 클래스와 멤버들의 목록
- usage.txt : 사용되지 않아 apk 파일에서 제거된 코드들의 목록 (proguard.cfg 설정 내용에 따라 적용되지 않는 경우 있음)
여기서 mapping.txt 파일은 난독화된 애플리케이션에서 발생하는 로그, 스택트레이스 등을 분석하기 위해 반드시 필요하므로 잘 보관해 두어야 합니다. 버전 업 후 Proguard 재적용시 새로운 mapping.txt가 덮어쓰여지게 되므로 버전 별로 mapping.txt를 잘 보관해 두어야 할 듯 합니다.
proguard.cfg에는 Proguard와 관련된 옵션을 설정해주는데 자세한 설정 방법은 Proguard 설명서를 참조하시면 됩니다. (사실 저도 잘 몰라요..^^;)
여기까지는 일반적인 Proguard 적용법이구요.. 외부 라이브러리를 사용한 경우에는 Proguard를 적용하는 과정에서 에러가 발생됩니다. 저도 이 에러 때문에 애를 좀 먹었는데 이러한 경우 에러를 해결하기 위해서는 외부라이브러리를 제외하는 옵션을 지정해 주어야 합니다. 구글에서 찾아본 결과 project.properties 파일에 -external.libs.dir=libs 를 추가하면 된다는 말도 있던데 저는 이렇게 해도 에러가 사라지지 않더군요. 그래서 저는 progaurd.cfg 파일 안에 -dontwarn 옵션을 추가하여 외부라이브러리를 난독화에서 제외하도록 했습니다. 그랬더니 에러없이 잘 되더군요.
-dontwarn 클래스명(같은 패키지에 속한 다수의 클래스를 지정하려면 패키지명.** 로 지정)
그리고 ADT에 포함되어 있는 Proguard는 구형 버전이라고 하더군요. 기왕이면 최신 Proguard를 다운로드 받아 설치하는 것이 좋겠죠.^^ 최신 Proguard 의 다운로드는 아래의 링크에서 하면 됩니다.
zip파일을 다운로드 후 압축을 풀어 나오는 폴더 중 lib, bin 폴더를 Android SDK가 설치된 폴더의 tools/proguard 경로에 덮어쓰기 하면 됩니다.
또한 Android SDK 나 프로젝트의 경로에 공백이 포함되어 있는 경우 Proguard 적용시 에러가 발생한다는 말도 있으니 혹시나 알 수 없는 에러가 계속 발생한다면 경로를 확인해 보는게 좋을거 같습니다.
참고 : 모든 것은 나의 뜻대로 - 안드로이드에 Proguard 적용 (이클립스)
지똥이 - Android Proguard 설정법 libs 라이브러리 포함
휴휴휴 - 안드로이드 이클립스에서 Proguard(프로가드) 사용하기
'모바일프로그래밍 > Android' 카테고리의 다른 글
Android Compile시 string.xml 관련 is not translated in ... Lint 에러 해결 방법 (0) | 2012.11.15 |
---|---|
WebView에서 동영상 재생시 전체화면모드에서 발생하는 오류 해결법 (1) | 2012.11.13 |
안드로이드 레이아웃 작업 시 기본 룰 (0) | 2012.11.08 |
해상도에 따른 레이아웃 폴더와, 이미지 폴더 분기 (0) | 2012.11.08 |
Target, minSdkVersion (0) | 2012.11.08 |
[펌] 성능을 위한 설계 (0) | 2012.01.13 |
this 사용에 따른 메모리 릭(Memory Leaks) (0) | 2012.01.13 |
Interpolation(보간법) 수식 (1) | 2012.01.06 |
Custom Widget에 사용자 속성 정의 및 사용하기 (0) | 2012.01.05 |
Searchable 리소스 (0) | 2011.12.28 |