안드로이드
안드로이드 앱 난독화
개굴이모자
2021. 2. 21. 22:43
반응형
안드로이드 앱 난독화
난독화의 목적은 앱 클래스, 메서드 및 필드의 이름을 단축해 앱 크기를 줄이는 것으로, 코드를 삭제하지는 않으면서 앱의 크기를 크게 절약할 수 있다.
난독화 장점
- 코드 축소 : 앱에서 사용하지 않는 클래스, 필드, 메서드, 라이브러리의 종속성을 감지하여 안전하게 삭제
- 리소스 축소 : 앱의 라이브러리 종속성에서 사용하지 않는 리소스를 포함하여 패키징된 앱에서 사용하지 않는 리소스 삭제
- 난독화 : 클래스와 멤버 이름을 줄여 DEX 파일 크기를 줄임, 네이밍을 바꿈으로써 가독성을 줄여 소스코드를 보호
- 최적화 : 코드 검사 후 다시 작성하여 DEX 파일 크기를 더 줄임
난독화 방법
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
- minifyEnabled true, shrinkResources true 설정하면 간단히 R8 난독화를 사용할 수 있음(gradle 플러그인 3.4 이상에서)
- proguard는 소스코드 레벨로 난독화를 진행, 그 외의 유료인 dexguard 의 경우 난독화가 유니코드 레벨의 치환으로 진행되어 더욱 강력
- 그 외 바이너리 난독화는 APK에서 클래스 위치 자체도 이동시켜서 원래 위치에서는 없애버리고, 클래스 로더를 이용해서 런타임시 로딩하는 방식을 사용하는게 일반적
난독화 예외
외부 라이브러리를 참조한 경우 등 난독화를 하지 않고 유지해야 하는 경우가 있다. 이럴 때, proguard-project.txt 등의 proguard file에서 -keep class 패키지이름{ *; }
의 코드를 적어 해당 패키지 혹은 클래스를 난독화 예외 처리한다.
외부라이브러리 에러
외부 라이브러리를 참조한 프로젝트는 warning이 발생할 수 있는데 이때, -dontwarn com.google.ads.**
등 warning 이 뜬 목록 패키지 뒤에 **를 붙여 해당 코드 전체에 대해 에러를 내지 않도록 처리할 수 있다.
그 외 추가 구성
참고 링크
반응형