Proguard 를 통한 Android 배포 전 코드 난독화
- Proguard로 apk,arr,Jar 등 Java기반의 export되는 파일내 클래스파일을 난독화/축소/최적화를 할 수 있다, 최적화에 따라 multidex앱이 되는 것을 피할 수 있다.
https://www.guardsquare.com/ko/%EC%A0%9C%ED%92%88/proguard](https://www.guardsquare.com/ko/제품/proguard
- Proguard GuI툴을 이용할 수도 있고, Android Studio에서 app레벨(sdk설정이나 외부라이브러리
implementation
하는) build.gradle
설정을 통해서 빌드시 자동으로 난독화 할 수 있게할 수도 있다.
- 웬만하면 안드로이드 스튜디오에서 만든 라이브러리 Jar파일은 AndroidStudio내에서 옵션을 통해 난독화하는게 낫다.
- 왜냐하면 코틀린 등을 빌드하는데 필요한 어노테이션 등은 AndroidStudio제작사인 IntelliJ에 종속적인 경우가있는데, 이런 라이브러리들을 구하기가 힘들기 때문이다.
- 그리고, Progurad GUI는 gradle이나 Maven을 이용해 외부라이브러리를 포함할 수 없어 해당 Jar파일을 만들때 이용한 외부라이브러리 등을 일일히 다 포함시켜줘야 한다. 사실상 모든 라이브러리들을 직접 포함하는 경우가 아니라면 GUI보단 IDE에서 제공하는 빌드옵션을 이용하자.
build.gradle
에서 debug 혹은 release에 minifyEnabled 속성을 true로 설정한 후 빌드하면 난독화가 진행된다.
- 예시) build.gradle
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
proguardFiles 'proguard-rules.pro'
}
}
- 프로젝트 생성시 gradle의 기본 설정이
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
인데, 여기서 getDefaultProguardFile
로 얻어오는 파일의 경로는 Android sdk 설정경로내 tools>proguard에 있다.
- Android Studio 설치시 기본 SDK 설치경로 기준 : C:\Users{User}\AppData\Local\Android\Sdk\tools\proguard
proguard-rules.pro
는 app디렉터리 바로 아래에 있으며, 사용자 정의 난독화 룰을 지정한다. proguard-rules
는 프리픽스가 아니며, .pro
파일을 추가한다는 것이 중요하다.
- proguard 의 룰은 상당히 많고, 다양하다. 그래서 보기도, 설정하기도 어려우므로 처음엔 proguard tools 경로에 있는 example 설정을 참고하는 것이 좋다.
- 난독화시 설정에 따라 참조하는 라이브러리도 export하는
jar
에 전부 포함될 수 있다. 이 경우, 만들어진 jar
를 참조하는 프로젝트에서 따로 jar
내부적인 의존성을 신경쓸 필요없어서 편할 수 있지만, 크기가 매우 커질 수 있다는 단점이 있다.