📱 Android

[Android] Proguard 적용하기

콩드로이드 2020. 8. 30. 00:05

proguard란?

 - 코드를 축소, 최적화, 난독화를 해주는 도구

Proguard가 중요한 이유

1. 디컴파일시 코드의 노출을 방지

 Proguard 설정을 하지 않는다면, 디컴파일러로 소스를 볼 수 있는 상황이 발생합니다

 

2. 앱을 최대한 작게 만들기 위해

 클래스와 멤버 이름을 줄여 DEX 파일 크기를 줄입니다

Proguard 설정 방법

 build.gradle 파일

buildTypes {
  release {
      minifyEnabled true // Proguard를 활성화
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  }
}

 

난독화를 시킬 경우, 예외적으로 난독화에서 제거해야할 부분이 발생할 수 있습니다.
외부 라이브러리의 경우 보통 프로가드 규칙이 정해져있는 경우가 많기에, 각 라이브러리를 참조하시길 바랍니다

 

Proguard 옵션

-keep class 패키지명.* {;} : 해당 패키지 난독화 제외
-keepatrributes : 소스파일, 라인 정보 유지
-dontwarn [class_filter] : class_filter에 해당하는 부분에 경고를 하지 않음

 

주로 쓰이는 옵션만 정리해보았습니다.

더 많은 옵션은 Proguard Manual 을 참고해보시길 바랍니다.

Decompile 확인해보기

APK가 디컴파일 됐을 때 소스를 확인하고 싶을 때 쓰이는 방법입니다.


1. dex2jar-2.0 설치 (APK를 .jar 파일로 변환해주는 툴)

 dex2jar 다운로드 링크

 

CMD(명령 프롬프트) 실행 후

cd \ // 최상위 폴더로 이동
cd dex2jar-2.0이 설치된 경로 // 설치된 경로로 이동합니다
d2j-dex2jar.bat APK명.apk 

 

를 실행하게 되면 해당 폴더에 jar 파일이 생성됩니다.

2.jd-Gui.exe 설치 (jar파일의 소스를 볼 수 있는 GDI 툴)

jd-Gui 다운로드 링크

File - Open File - jar 파일 클릭

해당 파일의 소스를 까볼 수 있습니다. 여기서 난독화를 진행한 부분과 진행되지 않은 부분을 확인하시면 됩니다.

외부 라이브러리를 사용하는 경우엔 프로가드 규칙이 나와있어서 쉽지만,
내부의 코드는 프로가드를 적용하기가 꽤 번거로웠습니다.

 

잘 작동하는지 확인해보시면서 프로가드 적용을 하시길 바랍니다

 

궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊