앱 배포를 위해 apk 파일을 만들던 중 apk파일의 크기를 줄이고 난독화가 필요하게 되어서 작성합니다!
내 첫 배포 ㅜㅜ 제발 조금만 문제가 일어났으면..
코드 난독화는 프로그램 코드의 일부 또는 전체를 변경하는 방법 중 하나로 코드의 가독성을 떨어트리는데 주 목적이 있다. (한마디로 내가 짠 코드를 외부로 유출방지하는 작업이다.)
난독화를 적용하는 범위에 따라 소스 코드 난독화와 바이너리 난독화로 나눌 수 있다.
buildTypes {
debug {
// 프로가드 비활성화
minifyEnabled false
// 기본 프로가드 설정
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
// 프로가드 활성화
minifyEnabled true
// 기본 프로가드 설정
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.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'
}
}
# 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
-keep class 패키지명.* -> 해당 패키지는 난독화를 제외
-keepatrributes -> 소스파일,라인 정보 유지
-dontwarn[class_filter] -> class_filter 에 해당하는 부분에 경고를 하지 않음.
++ 최근에는 Proguard 대신 R8을 사용한다고 한다.
gradle.properties에 추가하자.
android.enableR8=true