300x250

자세한 내용


안드로이드 공식 홈페이지

https://developer.android.com/studio/build/shrink-code?hl=ko

목적 


 - 코드 난독화 -> 디컴파일 등 코드 노출 or 앱 해킹에 대한 방어책 중 하나

이외 리소스 용량 절감 등 


적용 예 ( release에만 적용 ) 


App수준 Gradle ( build.gradle : Module )

> android { 

...

buildTypes{

...

release {

minifyEnabled true //code 축소
shrinkResources true //resource 축소
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro', 'gson.pro', 'glide.pro','aws.pro','retrofit2.pro' // ㅇ

// 추가 규칙 : 예외 적용 -> retrofit2, glide등 라이브러리에 대한 예외처리 필수

}

}

}


주의사항


두 모드 ( release와 debug) 에 대한 옵션을 상이하게 적용한 경우,

동작 확인 필수

예) debug 모드에서 정상적으로 동작, 

스토어에 release 모드로 배포된 앱 런타임중에 예외 발생 가능성 굉장히 높음.



추가사항 


2020-11-17

1. Firebase Crashlytics 읽을 수 있는 오류 보고서 

- Firebase Crashlytics를 사용할 경우, 읽을 수 있는 오류 보고서가 업로드 되려면 꼭 아래 옵션 적용

관련 링크 :
https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=android


-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.


- debug 버전엔 위 옵션을 적용안해도 판단된다면 아래 구문 삽입.
이 또한 위 링크에 자세히 설명되어있다.

buildTypes {
    debug
{
     ....

      firebaseCrashlytics
{
        mappingFileUploadEnabled
false
      }

    }
 
}



확인 필요 사항 


실제로 Proguard를 적용한 앱을 디컴파일 했을 때, 

보안키와 같은 중요한 정보 난독화 여부



반응형

+ Recent posts