본문 바로가기
개발노트/Android

[Android] 소스 코드 난독화, 앱 축소, 앱 최적화

by 전지적진영시점 2023. 7. 6.
반응형

앱 축소, 난독화 및 최적화

  • 앱을 최대한 작게 만들려면 출시 빌드에 shrink(축소)를 활성화하여 사용하지 않는 코드와 리소스를 제거해야한다.
  • android gradle 3.4.0 이상부터는 Pro Guard가 아닌 R8을 사용한다.

필요성

  • android 파일을 apk나 abb파일로 추출해내면 그냥 소스코드를 압축한 것이므로 리버스 엔지니어링이 가능하다.

R8

Desugaring

: Java8 이상의 API에서 사용할 수 있고 R8 컴파일러는 코드에 사용된 최신 기능을 이전 Java API로 백포팅합니다.

이는 최신 기능을 이전 Java API에서도 사용할 수 있음을 말합니다.

 

코드 축소

: R8이 라이브러리 종속성에서 사용하지 않는 코드를 포함하여 앱에서 사용하지 않는 코드를 제거하는 단계입니다.

 

리소스 축소

: 코드 축소가 완료되면 R8은 사용하지 않는 리소스를 식별하고 사용하지 않는 문자열, 이미지 등을 제거합니다.

 

난독화:

이 단계에서 R8은 리버스 엔지니어링으로부터 클래스를 보호하기 위해 클래스와 해당 필드의 이름을 바꾸고 재패키징할 수도 있습니다. 이 프로세스는 필요한 경우 실제 엔터티 이름을 다시 가져오는 데 사용할 수 있는 매핑 파일을 생성합니다.

 

코드 최적화

: 코드 최적화 중에 R8은 도달할 수 없는 코드 분기(클래스/파일과 반대)를 제거하여 앱 공간을 줄이고 효율성을 더 향상시킵니다. 한 곳에서만 호출되었을 때 호출 사이트에서 메서드를 인라인하는 것과 같은 고급 최적화 규칙을 사용합니다

 

 

<소스코드>

android {
    compileSdkVersion 33

	...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

 

minifyEnable true : 사용하지 않는 코드들이 제거되고 최적화 되며 코드를 난독화시켜준다.
shrinkResources true : 사용하지 않는 리소스들이 제거된다.
proguardFiles : 최적화되면 안되는 파일들을 정리한다.

 

minifyEnable true로 바꿔서 난독화를 진행하면 클래스 명과 함수명들이 모두 a,b,c로 바뀐다.

따라서 minifyEnable true 를 해주면 클래스명이나 함수명을 알 수 없어 리버스 엔지니어링이 거의 불가능하다.

반응형

댓글