반응형
앱 축소, 난독화 및 최적화
- 앱을 최대한 작게 만들려면 출시 빌드에 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 를 해주면 클래스명이나 함수명을 알 수 없어 리버스 엔지니어링이 거의 불가능하다.
반응형
'개발노트 > Android' 카테고리의 다른 글
[kotlin] onBackPressed() deprecated (0) | 2023.09.12 |
---|---|
[kotlin] build.gradle.kts viewBinding 설정 (0) | 2023.09.11 |
[Android] compile sdk version 33 이슈 (0) | 2023.06.29 |
[Android] sha1 구하기 (0) | 2023.06.12 |
[Android] WebView Custom UserAgent 셋팅하기 (0) | 2023.03.27 |
댓글