- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] android - proguard 본문
코드 난독화 및 최적화를 위한 툴로 Android 2.3인 진저브레드부터 Android SDK에 내장되었습니다.
소스코드에 공개될 경우 문제가 되는 정보가 담겨 있는 경우 반드시 proguard를 적용해야 합니다.
설정방법
1. proguard 설정 파일 지정
project.properties파일에 proguard.config=[프로가드설정파일] 형태로 명시합니다.
예) proguard.config=proguard-android.txt
2. proguard 설정 파일 생성
Android SDK 홈 디렉토리 밑에 /tools/proguard 디렉토리가 존재합니다.
해당 디렉토리에는 proguard-android.txt 파일과 proguard-android-optimize.txt 파일이 있습니다.
이는 최적화 적용 여부에 따라 두개의 파일로 구분해 놓은 것 입니다.
처음 proguard를 적용하는 개발자라면 proguard-android.txt 파일을 사용하여 적용하길 권장합니다.
3. proguard 설정
proguard-android.txt 파일을 프로젝트 홈디렉토리에 복사하였다면 기본적인 proguard 옵션이 적용이 된 것입니다.
기본 적용된 옵션은 다음과 같습니다.
-dontusemixedcaseclassnames : 대/소문자 섞인 클래스 이름을 허용하지 않음
-dontskipnonpubliclibraryclasses : public library가 아닌것을 무시하지 않게 함
-verbose : 로그를 표시함
-dontoptimize : 최적화를 사용하지 않음
-dontpreverify : 사전 검증기능을 사용하지 않음
기본 적용된 설정은 다음과 같습니다.
- Annotation 유지
- 네이티브 메소드 유지
- android.view.View에서 상속받은 public class의 getter/setter 메소드 유지
- android.app.Activity에서 상속받은 public class의 메소드중 android.view.View 인자를 갖는 메소드 유지
- enumeration class의 일부 static 메소드 유지
- android.os.Parcelable interface를 구현한 class 및 Parcelable$Creator를 리턴하는 메소드 유지
- R 리소스 클래스의 static 필드 유지
- android support 라이브러리 유지
이외 자신이 개발한 프로젝트에 다음과 같은 항목을 사용중이라면 추가적인 적용을 해야 합니다.
1) 미사용 코드를 제거하는 기능이 있는데 혹 잘못 판단되어 사용되는 코드가 제거 될 수 있습니다. (Injection 패턴과 같이 참조 방식을 사용하지 않은 코드라면 가능성이 높습니다.)
적용 예)
-dontshrink
2) WebView의 addJavascriptInterface() 메소드를 사용하여 Javascript 연동 코드를 사용하신다면 등록되는 Object class의 메소드는 유지되어야 합니다.
-keepclassmembers class [클래스 풀네임] {
<methods>;
}
3) Class.forName과 같이 동적로드를 사용하는 코드에서 로드되는 class는 유지되어야 합니다.
적용 예)
-keep public class [클래스 풀네임]
4) 외부 라이브러리 proguard 적용시 경고 무시
-dontwarn 명령으로 패키지 명을 지정하여 지정 가능하며 해당 패키지로 시작하는 모든 패키지를 적용할 경우 뒤에 **로 지정
적용 예)
-dontwarn [시작 패키지명].**
5) 외부 라이브러리 사용 설정
- 사용된 외부 라이브러리를 proguard가 찾지 못할 경우 -libraryjars 명령으로 라이브러리를 지정한다. (APK에 포함되는 라이브러리는 설정 할 필요없음)
적용 예)
-libraryjars [라이브러리파일경로]/[라이브러리파일명].jar
참고)
proguard 설정 대상을 지정하는 방법들
1) 단일 클래스 지정
[클래스 풀네임]
예) com.test.main.TestClass
2) 패키지명 필터링
[시작패키지명].**
예) com.test.**
3) interface 구현 클래스 모두
class implements [인터페이스 풀네임]
예) class implements com.test.define.TestInterface
4) 상속받은 subclass 모두
class extends [클래스 풀네임]
예) class extends com.test.AbstractClass
참고 URL
http://developer.android.com/tools/help/proguard.html
http://proguard.sourceforge.net
[출처] http://loeelver.blogspot.kr/2013/02/android-proguard.html
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] 백그라운드 AIDL 서비스 사용할때 (0) | 2013.05.21 |
---|---|
[안드로이드] getBaseContext()와 getApplicationContext()의 차이 (0) | 2013.05.21 |
[안드로이드] 외부Activity ,Service 호출 (0) | 2013.05.20 |
[안드로이드] PowerManager, getWindow() 를 이용한 Screen On / Off (0) | 2013.05.09 |
[안드로이드] 안드로이드에서 특정 하드웨어 유무에 상관없이 배포 가능하도록 AndroidManifest.xml 파일 구성하기 (0) | 2013.05.06 |