반응형
- 출처
http://loeelver.blogspot.kr/2013/02/android-proguard.html
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
소스코드에 공개될 경우 문제가 되는 정보가 담겨 있는 경우 반드시 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
반응형
'android' 카테고리의 다른 글
Android Studio [ Edit Template Variables Dialog ] (0) | 2016.01.23 |
---|---|
이클립스에서 Log.i 구문 추가하는 단축키 만들기 (0) | 2015.03.24 |
SlidingTabLayout 사용시 screenX 분배하기 (0) | 2014.11.21 |
Google Analytics SDK v4 for Android - Parameters (0) | 2014.10.17 |
customadapter 일때 부모창 method 호출 (0) | 2014.05.02 |