Android Studio 3.0 - Java 8 language feature

WindSekirun (wind.seo)·2022년 4월 26일
0

이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.

작성 시점: 2017-06-20

2017년 3월 15일, Android Studio 내부에서 Java 8 language feature을 활성화하기 위해 사용하던 Jack compiler 가 Deprecated 되었다.

처음엔 Jack toolchain 을 통해 Java 8 지원 추가를 테스트하였으나, 시간이 지남에 따라 Annotation processors(어노테이션 처리기), Bytecode analyzers and rewriters(바이트 코드 분석, 작성기) 들이 Jack로 전환하는 비용이 높아서 앞으로 Java 8 언어 기능들이 안드로이드 빌드 시스템에서 기본적으로 지원되게 할 예정이라고 한다.

물론 Jack 대신 Retrolambda를 쓰고 있었기에 문제 없었다. 그리고 안드로이드 스튜디오 3.0 Preview가 나오면서 위에 밝혀진 'Java 8 언어 기능에 대한 안드로이드 빌드 시스템 내부 지원' 이 Desugar 란 이름으로 돌아왔다.

Desugar 구조

Desugar 의 구조는 아래와 같다. (출처: Android Developer, Use Java 8 language features)

.java 가 javac 를 통해 컴파일 되면 class가 나오는데, 이 class를 기반으로 desugar 작업을 통하여 나온 결과물을 dex 화 시키는 것이다.

즉 desugar를 말로 표현하자면 javac - dex 사이에 Java 8 언어 기능을 사용한 코드를 하위 호환에 맞게 변환시키는 과정이다.

물론 기존과 같이 SDK 버전(minSdkVersion)에 따라 작동 범위 차이는 있다.

desugar 가 도입되면서 그레들 플러그인에도 변경점이 생겼는데, 바로 Retrolambda 와 Jack, DexGuard를 사용중일 경우 desugar를 도입하도록 경고를 표시하는 점이다.

아직까지는 위 3개를 사용중이면 위 3개가 우선적으로 작동하지만 좀 더 desugar가 안정화 되면 마이그레이션 할 예정이다.

결국은 Java8를 컴파일 옵션으로 두는 프로젝트면 기본적으로 활성화되게 되어, 별도 플러그인이 필요없어진 셈이다.

만일 비활성화 하고 싶다면 gradle.properties 파일에 android.enableDesugar=false 를 두면 되는거같다.

profile
Android Developer @kakaobank

0개의 댓글