-
Android R8 CompilerAndroid 2019. 12. 5. 11:43반응형
https://github.com/DNights/AndroidR8Sample
Android 의 기존의 Proguard 에서 R8으로 코드 최적화및 난독화 툴이 새롭게 업데이트 되었다.
gradle plugin 3.3 에서 사용할 수 있으며 3.4부터 기본 탑제 되었습니다.
R8은 디슈가링, 축소, 난독화, 최적화, 덱싱 등을 모두 한 단계로 통합된 형태로
아래 그림처럼 ProGuard와 달리 컴파일과 최적화를 통합하여 수행한다.
R8 세팅 방법은 Github 페이지에 작성 하였습니다. 참고 바랍니다.
https://github.com/DNights/AndroidR8Sample/commit/642e3a082e9bca6bb9d8e0125df5b437590aac91
App/builde.gradle 파일
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile( 'proguard-android-optimize.txt'), 'proguard-rules.pro' } // ... 중략 ... }
gradle.properties
android.enableR8=true #The option setting 'android.enableR8.fullMode=true' is experimental and unsupported. android.enableR8.fullMode=true
Full Mode 의 경우 사용 여부를 선택할 수 있습니다.
FullMode 사용시 내용은 공식 문서에서 아래와 같이 설명하고 있습니다.
추가적인 최적화를 사용하면 R8이 ProGuard와 다르게 작동하기 때문에 런타임 문제를 피하고자 ProGuard 규칙을 추가로 포함해야 할 수도 있습니다. 예를 들어, 코드가 Java Reflection API를 통해 클래스를 참조한다고 가정해 보겠습니다. 기본적으로 실제로 그렇게 코드를 작성하지 않았더라도 R8은 런타임에 클래스의 객체를 검사하고 조작하는 코드가 있다고 가정하고 자동으로 클래스와 클래스의 정적 초기화 프로그램을 유지합니다.
그러나 'full mode'를 사용하면 R8은 이러한 가정을 하지 않으며 런타임에 코드가 클래스를 사용하지 않는다고 판단되면 앱의 최종 DEX에서 클래스를 삭제합니다. 즉, 클래스와 클래스의 정적 초기화 프로그램을 유지하려면 규칙 파일에 keep 규칙을 포함해야 합니다.
즉 Runtime 상에서 class 을 할당하는 경우에는 정상적으로 작동을 안할수도 있습니다.
이 경우에는 확인이 필요합니다.
p.s
빌드시간의 경우 오히려 늘어난 경우가 있어 이건 시간을 두고 지속적으로 확인이 필요해 보입니다.
[참고 링크]
https://developer.android.com/studio/build/shrink-code
https://android-developers.googleblog.com/2018/11/r8-new-code-shrinker-from-google-is.html
https://developer.android.com/studio/releases
https://engineering.linecorp.com/ko/blog/how-to-make-android-app-build-faster/
https://www.guardsquare.com/ko/blog/proguard-and-r8-comparison-optimizershttps://www.guardsquare.com/ko/blog/proguard-and-r8-comparison-optimizers
https://proandroiddev.com/android-cpu-compilers-d8-r8-a3aa2bfbc109
https://jakewharton.com/digging-into-d8-and-r8/
https://jakewharton.com/r8-optimization-staticization/
https://developer.android.com/studio/write/java8-support?hl=ko
반응형'Android' 카테고리의 다른 글
Android 고유식별자 (unique identifiers) (0) 2020.01.02 Android Studio Editor 폰트(글꼴) 변경 (0) 2019.12.17 Storage Access Framwork 다루기 (Android ScopedStorage) (1) 2019.12.13 MediaStore File 다루기 (Android ScopedStorage) (6) 2019.12.11 Android Studio Layout Inspector (0) 2019.12.05 Android Decompile Setting (0) 2019.11.28 Declarative UI Patterns (0) 2019.10.26 안드로이드 비동기 처리 질문 (Thread Sleep) (0) 2019.10.06