난독화 Proguard

매일 수정하는 GNOSS LV5·2021년 11월 5일
1

AndroidStudio

목록 보기
31/83

앱 배포를 위해 apk 파일을 만들던 중 apk파일의 크기를 줄이고 난독화가 필요하게 되어서 작성합니다!

내 첫 배포 ㅜㅜ 제발 조금만 문제가 일어났으면..

코드 난독화란?

코드 난독화는 프로그램 코드의 일부 또는 전체를 변경하는 방법 중 하나로 코드의 가독성을 떨어트리는데 주 목적이 있다. (한마디로 내가 짠 코드를 외부로 유출방지하는 작업이다.)
난독화를 적용하는 범위에 따라 소스 코드 난독화와 바이너리 난독화로 나눌 수 있다.

  • DEX파일 크기를 줄이는 목적으로 사용하기도 한다.
💡 DEX파일이란? Dex파일에는 안드로이드 런타임에서 궁극적으로 실행되는 코드가 있다. 즉 Binary파일로 기계어로 되어있다.

원리

  • 필요 이상으로 복잡하고 아무것도 하지 않는 코드를 작성한다.
  • 관련 없는 함수를 뒤섞는다.
  • 데이터를 알아보지 못하게 인코딩한다.

코드 난독화 및 APK최적화를 위한 Android Proguard 사용법

  1. 빌드 타입을 나눠준다.
buildTypes {

    debug {
        // 프로가드 비활성화
        minifyEnabled false
        // 기본 프로가드 설정
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    release {
        // 프로가드 활성화
        minifyEnabled true
        // 기본 프로가드 설정
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
  1. 프로가드 활성화 및 debug.pro 설정
buildTypes {
   
    debug {
        // 프로가드 활성화
        minifyEnabled true
        // 기본 프로가드 설정
        proguardFile getDefaultProguardFile('proguard-android.txt')
        // 프로젝트에 필요한 프로가드 설정
        proguardFile 'proguard-rules.pro'
    }

    release {
        // 프로가드 활성화
        minifyEnabled true

        // 기본 프로가드 설정
        proguardFile getDefaultProguardFile('proguard-android.txt')
        // 프로젝트에 필요한 프로가드 설정
        proguardFile 'proguard-rules.pro'
    }
}
  1. 추가적인 프로가드 설정 방법
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

// 이곳에 원하는 방식을 작성해주면 된다.

# naver
-keep public class com.nhn.android.naverlogin.** { public protected *; }
# kakao
-keep class com.kakao.sdk.**.model.* { <fields>; }
# gson
-keep class * extends com.google.gson.TypeAdapter
  1. Proguard 옵션
-keep class 패키지명.* -> 해당 패키지는 난독화를 제외

-keepatrributes -> 소스파일,라인 정보 유지

-dontwarn[class_filter] -> class_filter 에 해당하는 부분에 경고를 하지 않음.

++ 최근에는 Proguard 대신 R8을 사용한다고 한다.

gradle.properties에 추가하자.

android.enableR8=true
profile
러닝커브를 따라서 등반중입니다.

0개의 댓글