티스토리 뷰
- 사용 목적
- 코드 난독화 (보안 이슈)
- 아울러 코드 최적화
- Proguard 다운로드
- http://proguard.sourceforge.net (작성시점 버전 4.7)
- Proguard 설치 경로
- $ANDROID_SDK_HOME/tools/proguard (대개 $ANDROID_SDK_HOME = c:\progra~1\android\android-sdk\
- 적용 과정
- 주요 과정
- 이클립스에서 생성한 안드로이드 프로젝트 루트에 project.properties 파일이 있다. 이 파일 맨 밑에 'proguard.config=proguard.cfg'를 추가한다.
- 루트에 proguard.cfg 파일이 있다. 이 파일에 난독화 관련 설정 내용을 작성한다. (jni 네이티브 예외처리 등 기본적인 내용이 작성되어 있다)
- 이후 프로젝트 루트 > (마우스 우측) > [Tools] > [Export signed Application Package]를 실행해 서명된 apk 파일을 생성한다.
- apk 생성 후 프로젝트 폴더/proguard/ 아래에 만들어지는 텍스트 파일은 다음과 같다. (적용 유형에 따라 생성되지 않는 파일이 있다)
- dump.txt : 어플리케이션에서 사용중인 클래스들의 내부 구조에 대한 대략적인 정보
- mapping.txt : 난독화 과정에서 기존 클래스 혹은 메서드가 어떤 새로운 난독화된 이름으로 매핑되었는지 그 목록. 난독화된 애플리케이션에 발생하는 로그나, 스택 트레이스 들을 분석하기 위해 필요
- seeds.txt : 난독화되지 않은 클래스와 멤버들의 목록
- usage.txt : 사용되지 않아 apk 파일에서 제거된 코드들의 목록 (proguard.cfg 설정 내용에 따라 적용되지 않는 경우 있음)
- 위 과정으로 진행되지 않거나 생성된 apk 파일이 제대로 작동하지 않으면 아래와 같이 진행
- project.properties
- target=android-8
- -external.libs.dir=libs //라이브러리 file 제외
- proguard.config=proguard.cfg // Proguard 설정
- proguard.cfg
- -verbose //로그 봄
- -dontoptimize // 압축 하지 않음 그냥 하지말자...
- -dontshrink //사용하지 않는 메소드를 유지하라
- -keep public class 별표 { public protected 별표; }
- public class 와 protected class를 난독화하지 않는다.
- project.properties
- 주의사항
- 파일 경로, 안드로이드 SDK 경로 모두 공백이 들어가면 오류 발생 (파라미터 분할을 공백으로 하기 때문에 경로에 공백이 끼어 있으면 이를 분할된 파라미터로 인식하기 때문)
- 소괄호 (, )가 들어가도 오류 발생
- 프로젝트를 생성할 때부터 경로 설정에 신경써야 한다
- 또한 jni가 직접 사용하는 클래스 예외 처리는 필수다.
- 아울러 예외처리를 위한 * 연산자 사용시 하위 패키지를 일일이 지정해 예외처리를 해 줘야 한다.
- com.mcenter 하위 모든 클래스에 대한 예외 처리는 다음과 같다.
- -keep public class net.comple.* { public protected *; }
- -keep public class net.comple.data.*{ public protected *; }
- -keep public class net.comple.eventListener.* { public protected *; }
- com.mcenter 하위 모든 클래스에 대한 예외 처리는 다음과 같다.
- 안드로이드 SDK 업데이트시 Proguard가 구버전으로 돌아간다. 따라서 다시 Proguard 최신 버전을 받아 살포시 덮어 준다.
- APK 생성시 'conversion to Dalvik format failed with error 1' 오류를 뱉어낸다.
- 파일 경로, 안드로이드 SDK 경로 모두 공백이 들어가면 오류 발생 (파라미터 분할을 공백으로 하기 때문에 경로에 공백이 끼어 있으면 이를 분할된 파라미터로 인식하기 때문)
- 프로젝트 적용 내용
- 기존 proguard.cfg 내용 따름
- 단, jni에서 직접 다루는 클래스인 com.mcenter 하위 모든 클래스에 대해 예외 처리 적용
- shrink, optimize 적용
'개발 > 개발 자료' 카테고리의 다른 글
(Android) java.lang.IllegalStateException (0) | 2015.04.25 |
---|---|
이동통신사별 마켓 등록, 업데이트시 체크포인트 (0) | 2015.04.22 |
(Android) 새롭게 바뀐 구글 GCM Client 어떻게 바뀌었나? (0) | 2015.04.10 |
(Android) Layout(xml) 화면에서도 단축키로 디버깅 실행하기 (0) | 2015.04.09 |
(Android) TextView Auto FadeIn, FadeOut (0) | 2015.04.03 |
댓글