Android Gradle 플러그인 3.3.0(2019년 1월)

이 버전의 Android 플러그인에는 다음이 필요합니다.

3.3.3(2020년 7월)

이번 소규모 업데이트에서는 Android 11의 패키지 공개 상태와 관련된 새로운 기본 설정 및 기능과의 호환성을 지원합니다.

자세한 내용은 4.0.1 출시 노트를 참고하세요.

3.3.2(2019년 3월)

이번 소규모 업데이트는 Android 스튜디오 3.3.2를 지원하고 다양한 버그 수정 및 성능 개선을 포함합니다. 중요한 버그 수정 목록을 보려면 업데이트 출시 블로그에서 관련 게시물을 읽어보세요.

3.3.1(2019년 2월)

이번 소규모 업데이트는 Android 스튜디오 3.3.1을 지원하고 다양한 버그 수정 및 성능 개선을 포함합니다.

새로운 기능

  • 클래스 경로 동기화 개선: 런타임 및 컴파일 시간 클래스 경로에 관한 종속 항목을 확인할 때 Android Gradle 플러그인은 여러 클래스 경로에 나타나는 종속 항목에 관한 특정 다운스트림 버전 충돌을 수정하려고 합니다.

    예를 들어 런타임 클래스 경로에 라이브러리 A 버전 2.0이 포함되고 컴파일 클래스 경로에 라이브러리 A 버전 1.0이 포함된 경우 플러그인은 오류를 방지하기 위해 컴파일 클래스 경로에 관한 종속 항목을 라이브러리 A 버전 2.0으로 자동 업데이트합니다.

    그러나 런타임 클래스 경로에 라이브러리 A 버전 1.0이 포함되고 컴파일 클래스 경로에 라이브러리 A 버전 2.0이 포함된 경우 플러그인은 컴파일 클래스 경로에 관한 종속 항목을 라이브러리 A 버전 1.0으로 다운그레이드하지 않으므로 오류가 발생합니다. 자세한 내용은 클래스 경로 간 충돌 해결을 참고하세요.

  • 주석 프로세서 사용 시 증분 자바 컴파일 개선: 이 업데이트는 주석 프로세서 사용 시 증분 자바 컴파일에 관한 지원을 개선해 빌드 시간을 줄입니다.

    참고: 이 기능은 Gradle 4.10.1 이상과 호환되나 Gradle 문제 8194로 인해 Gradle 5.1은 제외됩니다.

    • Kotlin 전용 프로젝트 및 Kotlin-자바 하이브리드 프로젝트가 대부분인 Kapt를 사용하는 프로젝트의 경우: 데이터 결합이나 레트로 람다 플러그인을 사용하더라도 증분 자바 컴파일이 사용 설정됩니다. Kapt 작업에 의한 주석 처리는 아직 증분되지 않습니다.

    • Kapt를 사용하지 않는 자바 전용 프로젝트의 경우: 사용하는 주석 프로세서가 증분 주석 처리를 모두 지원하는 경우 증분 자바 컴파일이 기본으로 사용 설정됩니다. 증분 주석 프로세서 채택을 모니터링하려면 Gradle 문제 5277을 참고하세요.

      그러나 하나 이상의 주석 프로세서가 증분 빌드를 지원하지 않는다면 증분 자바 컴파일이 사용 설정되지 않습니다. 대신 gradle.properties 파일에 다음 플래그를 포함할 수 있습니다.

      android.enableSeparateAnnotationProcessing=true
                  

      이 플래그를 포함하면 Android Gradle 플러그인이 별도의 작업에서 주석 프로세서를 실행하고 자바 컴파일 작업을 증분식으로 실행할 수 있습니다.

  • 더 이상 사용하지 않는 API를 사용할 때 더 나은 디버그 정보: 플러그인이 더 이상 지원되지 않는 API를 사용하고 있음을 감지하면 이제 API가 사용되는 위치를 판단하는 데 도움이 되는 보다 자세한 정보를 제공할 수 있습니다. 추가 정보를 보려면 프로젝트의 gradle.properties 파일에 다음을 포함해야 합니다.

              android.debug.obsoleteApi=true
            

    명령줄에서 -Pandroid.debug.obsoleteApi=true를 전달하여 플래그를 사용 설정할 수 있습니다.

  • 명령줄에서 기능 모듈에 관한 계측 테스트를 실행할 수 있습니다.

동작 변경사항

  • 지연된 작업 구성: 플러그인은 이제 Gradle의 새로운 작업 생성 API를 사용하여 현재 빌드 또는 실행 작업 그래프에 없는 작업을 완료하는 데 필요하지 않은 작업의 초기화 및 구성을 방지합니다. 예를 들어 'release' 및 'debug' 빌드 변형과 같은 여러 빌드 변형이 있고 앱의 'debug' 버전을 빌드하고 있다면 플러그인은 앱의 'release' 버전의 작업을 초기화하거나 구성하지 않습니다.

    variant.getJavaCompile()과 같은 Variants API에서 특정 이전 메서드를 호출하면 여전히 작업 구성을 강제할 수도 있습니다. 지연 작업 구성에 빌드가 최적화되어 있는지 확인하려면 variant.getJavaCompileProvider()와 같은 TaskProvider 객체를 반환하는 새로운 메서드를 호출합니다.

    맞춤 빌드 작업을 실행하는 경우 Gradle의 새로운 작업 생성 API에 적응하는 방법을 알아보세요.

  • useProguard false를 설정할 때 지정된 빌드 유형의 경우 플러그인은 이제 ProGuard 대신 R8을 사용하여 앱의 코드와 리소스를 축소 및 난독화합니다. R8에 관한 자세한 내용은 Android 개발자 블로그에서 이 블로그 게시물을 읽어보세요.

  • 라이브러리 프로젝트를 위한 더 빠른 R 클래스 생성: 이전에는 Android Gradle 플러그인이 각 프로젝트의 종속 항목에 관해 R.java 파일을 생성한 다음 R 클래스를 앱의 다른 클래스와 함께 컴파일했습니다. 이제 플러그인은 먼저 중간 R.java 클래스를 빌드하지 않고 앱의 컴파일된 R 클래스를 포함하는 JAR을 직접 생성합니다. 이러한 최적화로 라이브러리 하위 프로젝트 및 종속 항목을 많이 포함하는 프로젝트의 빌드 성능이 크게 개선되고 Android 스튜디오의 색인 생성 속도도 개선될 수 있습니다.

  • 이제 Android App Bundle을 빌드할 때 Android 6.0(API 수준 23) 이상을 타겟팅하는 App Bundle에서 생성된 APK에 압축되지 않은 버전의 네이티브 라이브러리가 기본적으로 포함됩니다. 이러한 최적화로 기기가 라이브러리를 복사하지 않아도 되므로 앱의 디스크 크기가 줄어듭니다. 최적화를 사용 중지하려면 gradle.properties 파일에 다음을 추가합니다.

    android.bundle.enableUncompressedNativeLibs = false
            
  • 플러그인은 일부 서드 파티 플러그인의 최소 버전을 시행합니다.

  • 단일 변형 프로젝트 동기화: 빌드 구성을 사용하여 프로젝트를 동기화하는 것은 Android 스튜디오가 프로젝트의 구성 방식을 이해하도록 하는 데 중요한 단계입니다. 하지만 대규모 프로젝트의 경우에는 이 과정에 시간이 오래 걸릴 수 있습니다. 프로젝트에서 빌드 변형을 여러 개 사용하는 경우 이제 프로젝트 동기화를 현재 선택한 변형으로만 제한하여 최적화할 수 있습니다.

    이 최적화를 사용 설정하려면 Android 스튜디오 3.3 이상과 Android Gradle 플러그인 3.3.0 이상을 사용해야 합니다. 이러한 요구사항을 충족하면 프로젝트를 동기화할 때 IDE에서 이 최적화를 사용 설정하라는 메시지가 표시됩니다. 최적화는 새로운 프로젝트에도 기본으로 사용 설정됩니다.

    최적화를 수동으로 사용 설정하려면 File > Settings > Experimental > Gradle(Mac에서는 Android Studio > Preferences > Experimental > Gradle)을 클릭하고 Only sync the active variant 체크박스를 선택합니다.

    참고: 이 최적화는 자바 및 C++ 언어를 포함하는 프로젝트를 완전히 지원하며 Kotlin을 일부 지원합니다. Kotlin 콘텐츠가 포함된 프로젝트의 최적화를 사용 설정하면 Gradle 동기화는 전체 변형을 내부적으로 사용하는 방식으로 되돌아갑니다.

  • 누락된 SDK 패키지 자동 다운로드: 이 기능은 NDK를 지원하도록 확장되었습니다. 자세한 내용은 Gradle을 사용하여 누락된 패키지 자동 다운로드를 읽어보세요.

버그 수정

  • Android Gradle 플러그인 3.3.0은 다음 문제를 해결합니다.

    • Jetifier가 사용 설정되었지만 AndroidX 버전 대신 android.support.v8.renderscript.RenderScript를 호출하는 빌드 프로세스
    • 정적으로 번들된 annotation.AnyRes를 포함하는 androidx-rs.jar로 인한 충돌
    • RenderScript를 사용하는 경우 build.gradle 파일에 빌드 도구 버전을 더 이상 수동으로 설정하지 않아도 됨