-
Android R8 CompilerAndroid 2019. 12. 5. 11:43반응형
https://github.com/DNights/AndroidR8Sample
DNights/AndroidR8Sample
Contribute to DNights/AndroidR8Sample development by creating an account on GitHub.
github.com
Android 의 기존의 Proguard 에서 R8으로 코드 최적화및 난독화 툴이 새롭게 업데이트 되었다.
gradle plugin 3.3 에서 사용할 수 있으며 3.4부터 기본 탑제 되었습니다.
R8은 디슈가링, 축소, 난독화, 최적화, 덱싱 등을 모두 한 단계로 통합된 형태로
아래 그림처럼 ProGuard와 달리 컴파일과 최적화를 통합하여 수행한다.
https://developer.android.com/studio/releases https://developer.android.com/studio/releases R8 세팅 방법은 Github 페이지에 작성 하였습니다. 참고 바랍니다.
https://github.com/DNights/AndroidR8Sample/commit/642e3a082e9bca6bb9d8e0125df5b437590aac91
add R8 setting · DNights/AndroidR8Sample@642e3a0
Permalink Browse files add R8 setting Loading branch information... Showing 2 changed files with 13 additions and 0 deletions. +9 −0 app/build.gradle +4 −0 gradle.properties @@ -17,8 +17,17 @@ android { } buildTypes { release { minifyEnabled true shrinkRes
github.com
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
앱 축소, 난독화 및 최적화 | Android Developers
사용하지 않는 코드와 리소스를 삭제하기 위해 출시 빌드에서 코드를 축소하는 방법을 알아보세요.
developer.android.com
https://android-developers.googleblog.com/2018/11/r8-new-code-shrinker-from-google-is.html
R8, the new code shrinker from Google, is available in Android studio 3.3 beta
Android developers know that APK size is an important factor in user engagement. Code shrinking helps reduce the size of your APK by getting rid of unused code and resources as well as making your actual code take less space (also known as minification or
android-developers.googleblog.com
https://developer.android.com/studio/releases
Android 스튜디오 출시 노트 | Android Developers
Android의 공식 IDE인 Android 스튜디오의 최신 버전에 있는 새로운 기능을 알아보세요.
developer.android.com
https://engineering.linecorp.com/ko/blog/how-to-make-android-app-build-faster/
Android 앱 빌드 속도를 높이는 10가지 방법 - LINE ENGINEERING
이번 글에서는 Android 앱 빌드 속도를 높일 수 있는 10가지 방법에 대해 알아보려고 합니다. 빌드 속도는 생산성 향상을 위해 매우 중요한 요소입니다. 저는 APK 하나를 생성하는 데에 8분 넘게 걸렸던 적이 있습니다. 각 프로젝트 상황에 따라 더 오래 걸리는 팀도 있을 텐데요. 그게 바로 우리 팀 얘기라면 이번 블로그를 꼭 읽고 제가 소개드리는 방법을 잘 활용하셨으면 좋겠습니다.
engineering.linecorp.com
https://www.guardsquare.com/ko/blog/proguard-and-r8-comparison-optimizershttps://www.guardsquare.com/ko/blog/proguard-and-r8-comparison-optimizers
ProGuard and R8: a comparison of optimizers
Android's optimizer R8 is growing on the horizon, so we get a lot of questions how it relates to ProGuard. In this blog, we'll have a closer look.
www.guardsquare.com
https://proandroiddev.com/android-cpu-compilers-d8-r8-a3aa2bfbc109
Android CPU, Compilers, D8 & R8
Imagine you have an important space mission ahead. You need a spacecraft that won’t get you into much trouble on the way. You may opt in a…
proandroiddev.com
https://jakewharton.com/digging-into-d8-and-r8/
Digging into D8 and R8 – Jake Wharton
D8 has replaced DX as the default dexer, the tool which converts Java bytecode to Dalvik bytecode. R8 is coming as the default shrinker, the tool which removes and optimizes code. While you may have heard about one or both of these tools before, not a lot
jakewharton.com
https://jakewharton.com/r8-optimization-staticization/
R8 Optimization: Staticization – Jake Wharton
jakewharton.com
https://developer.android.com/studio/write/java8-support?hl=ko
Java 8 언어 기능 사용하기 | Android Developers
사용할 수 있는 Java 8 언어 기능, 이러한 기능을 사용할 프로젝트를 올바르게 구성하는 방법 및 발생할 수 있는 알려진 문제를 알아봅니다.
developer.android.com
반응형'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