코딩하는 개굴이

안드로이드 앱 난독화 본문

안드로이드

안드로이드 앱 난독화

개굴이모자 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 이 뜬 목록 패키지 뒤에 **를 붙여 해당 코드 전체에 대해 에러를 내지 않도록 처리할 수 있다.

그 외 추가 구성

참고 링크

반응형

'안드로이드' 카테고리의 다른 글

[안드로이드] 의존성 주입 (DI) 란?  (0) 2021.03.13
[안드로이드] Textview의 drawable 속성  (0) 2021.03.06
Static 에 대하여  (0) 2021.02.21
Singleton 패턴에 대하여  (0) 2021.02.21
LayoutInflater란  (0) 2021.02.21
Comments