안녕하세요. 오늘은 코드 난독화 및 APK 최적화를 위한 프로가드에 대해 알아보겠습니다.
1.Android Proguard가 필요한 이유
- 코드 난독화를 통해 디컴파일시 본인의 코드가 노출되는 것을 방지 할 수 있습니다.
- 불필요한 메서드를 제거해 멀티덱스를 피할 수 있습니다.
멀티덱스란?
안드로이드 앱을 구성하는 코드는 컴파일 되어 덱스(
dex
) 파일로 만들어지는데, 하나의 덱스(dex
) 파일에 최대 65536개의 메소드만 참조 할 수 있습니다.
만약 프로젝트의 코드가 65536개의 메소드를 초과하게 되면 덱스(dex
)파일이 여러개 생성되게 됩니다.
멀티 덱스를 사용해 컴파일 할 수 있지만, 빌드 과정에 앱 내의 파일을 여러개의 덱스파일로 나누어야 하므로 빌드 속도가 느려지고 APK의 용량이 커지게 됩니다.
가능하다면 프로가드를 설정해 주면 좋습니다.
2.프로가드의 특징
2.1 축소(shrinking)
축소는 APK의 크기를 줄이는 것을 말한다. ProGuard를 사용하면 앱 내 사용되지 않는 변수, 메서드, 클래스를 탐지할 수 있다. 사용하지 않는 코드는 애플리케이션과 라이브러리에서 모두 제거된다. 축소는 두 단계로 이루어져 있다.
- 코드 축소 : 사용하지 않는 변수, 메소드, 클래스, 속성을 애플리케이션과 해당 라이브러리 종속성에서 제거 -> “멀티덱스” 제거
- 리소스 축소 : 애플리케이션과 해당 라이브러리 종속성에서 사용되지 않는 리소스 파일을 제거
2.2 최적화
최적화는 바이트코드를 최적화하는 것을 말한다. 사용하지 않는 명령어는 앱 성능에 부정적인 영향을 미칠 수 있다. 생성된 코드의 작은 세그먼트에 있는 중복 명령어는 peephole 최적화 기술을 통해 제거된다. 이 단계에서 중복된 코드가 제거되고 더 짧은 명령어로 대체될 수 있는 명령어가 식별되어 제거되게 된다.
3.3 난독화
난독화는 코드를 읽게 어렵게 만드는 과정이다 무단으로 액세스 권한을 얻은 제 3자는 코드는 이해할 수 없다. 사용되지 않은 코드를 제거한 후 나머지 클래스, 필드, 메서드의 이름을 임의 문자를 사용해 변경한다. 코드 세그먼트의 원래 의도를 해커로부터 숨기기 위해 난독화가 사용된다.