Android Gradle 플러그인 출시 노트

Android 스튜디오 빌드 시스템은 Gradle을 기반으로 하며 Android Gradle 플러그인에는 Android 앱을 빌드하는 데 사용하는 몇 가지 추가 기능이 있습니다. Android 플러그인은 일반적으로 Android 스튜디오와 완전히 동기화되어 업데이트되지만, 나머지 Gradle 시스템과 함께 Android 스튜디오에 독립적으로 실행되고 별도로 업데이트될 수 있습니다.

이 페이지에는 Gradle 도구를 업데이트하는 방법과 최근 업데이트 내용이 설명되어 있습니다.

Gradle을 사용하여 Android 빌드를 구성하는 방법에 관한 자세한 내용은 다음 페이지를 참조하세요.

Gradle 빌드 시스템에 관한 자세한 내용은 Gradle 사용자 가이드를 참조하세요.

Android Gradle 플러그인 업데이트

Android 스튜디오를 업데이트하면 Android Gradle 플러그인을 사용 가능한 최신 버전으로 자동 업데이트하라는 메시지가 표시될 수 있습니다. 업데이트를 수락하거나 프로젝트의 빌드 요구사항에 따라 특정 버전을 수동으로 지정할 수 있습니다.

Android 스튜디오의 File > Project Structure > Project 메뉴 또는 최상위 build.gradle 파일에서 플러그인 버전을 지정할 수 있습니다. 플러그인 버전은 Android 스튜디오 프로젝트에 빌드된 모든 모듈에 적용됩니다. 다음 예는 build.gradle 파일에서 플러그인을 버전 3.4.2로 설정합니다.

    buildscript {
        repositories {
            // Gradle 4.1 and higher include support for Google's Maven repo using
            // the google() method. And you need to include this repo to download
            // Android Gradle plugin 3.0.0 or higher.
            google()
            ...
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.4.2'
        }
    }
    

주의: 버전 번호에 동적 종속성을 사용해서는 안 됩니다(예: 'com.android.tools.build:gradle:2.+'). 이 기능을 사용하면 예기치 않은 버전 업데이트가 발생하고 버전 차이를 확인하기가 어려울 수 있습니다.

지정된 플러그인 버전을 다운로드하지 않은 경우, 다음에 프로젝트를 빌드하거나 Android 스튜디오 메뉴 바에서 Tools > Android > Sync Project with Gradle Files를 클릭하면 Gradle에서 플러그인 버전을 다운로드합니다.

Gradle 업데이트

Android 스튜디오를 업데이트하면 Gradle 또한 사용 가능한 최신 버전으로 업데이트하라는 메시지가 표시될 수 있습니다. 업데이트를 수락하거나 프로젝트의 빌드 요구사항에 따라 버전을 수동으로 지정할 수 있습니다.

다음 표는 각 버전의 Android Gradle 플러그인에 필요한 Gradle 버전을 보여줍니다. 최상의 성능을 위해서는 Gradle과 플러그인을 가능한 최신 버전으로 사용해야 합니다.

플러그인 버전필요한 Gradle 버전
1.0.0~1.1.32.2.1~2.3
1.2.0~1.3.12.2.1~2.9
1.5.02.2.1~2.13
2.0.0~2.1.22.10~2.13
2.1.3~2.2.32.14.1+
2.3.0+3.3+
3.0.0+4.1+
3.1.0+4.4+
3.2.0~3.2.14.6+
3.3.0~3.3.24.10.1+
3.4.0+5.1.1+

Android 스튜디오의 File > Project Structure > Project 메뉴에서 또는 gradle/wrapper/gradle-wrapper.properties 파일의 Gradle 배포 참조를 편집하여 Gradle 버전을 지정할 수 있습니다. 다음 예는 gradle-wrapper.properties 파일에서 Gradle 버전을 5.1.1로 설정합니다.

    ...
    distributionUrl = https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
    ...
    

3.4.0(2019년 4월)

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

3.4.2(2019년 7월)

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

3.4.1(2019년 5월)

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

새로운 기능

  • 새로운 lint 검사 종속성 구성: lintChecks 동작이 변경되고 새로운 종속성 구성인 lintPublish가 도입되어, Android 라이브러리에 패키징된 lint 검사를 더 효과적으로 제어할 수 있습니다.

    • lintChecks: 프로젝트를 로컬로 빌드할 때만 실행하려는 lint 검사에 사용해야 하는 기존 구성입니다. 이전에는 lintChecks 종속성 구성을 사용하여 게시된 AAR에 lint 검사를 포함했다면 종속성을 이전하여 아래에 설명된 새로운 lintPublish 구성을 대신 사용해야 합니다.
    • lintPublish: 게시된 AAR에 포함하려는 lint 검사를 위해 다음과 같이 라이브러리 프로젝트에서 이 새로운 구성을 사용합니다. 라이브러리를 사용하는 프로젝트도 lint 검사를 적용하게 됩니다.

    다음 코드 샘플은 로컬 Android 라이브러리 프로젝트에서 두 가지 종속성 구성을 모두 사용합니다.

    dependencies {
          // Executes lint checks from the ':lint' project at build time.
          lintChecks project(':lint')
          // Packages lint checks from the ':lintpublish' in the published AAR.
          lintPublish project(':lintpublish')
        }
        
  • 일반적으로 패키징 및 서명 작업의 전반적인 빌드 속도가 개선됩니다. 이러한 작업과 관련하여 성능 저하를 발견한 경우 버그를 신고하세요.

동작 변경사항

  • Android 인스턴트 앱의 플러그인 지원 중단 경고 기능: 인스턴트 앱 빌드를 위해 com.android.feature 플러그인을 여전히 사용하고 있다면 Android Gradle 플러그인 3.4.0이 지원 중단 경고를 보냅니다. 이후 버전의 플러그인에서 인스턴트 앱을 계속 빌드할 수 있도록 하려면 단일 Android App Bundle에서 설치된 앱 환경과 인스턴트 앱 환경 두 가지를 모두 게시할 수 있는 동적 기능 플러그인을 사용하여 인스턴트 앱을 이전하세요.

  • 기본적으로 사용 설정되는 R8: R8은 디슈가링, 축소, 난독화, 최적화, 덱싱 등을 모두 한 단계로 통합하여 빌드 성능을 눈에 띄게 개선합니다. R8은 Android Gradle 플러그인 3.3.0에서 도입되었으며 이제 플러그인 3.4.0 이상을 사용하는 앱 및 Android 라이브러리 프로젝트 모두에서 기본적으로 사용 설정됩니다.

    아래 이미지는 R8이 도입되기 전의 컴파일 프로세스를 개략적으로 보여줍니다.

    R8 이전에는 ProGuard가 덱싱 및 디슈가링과 다른 컴파일 단계였습니다.

    이제 R8을 사용하면 아래 그림과 같이 디슈가링, 축소, 난독화, 최적화, 덱싱(D8) 등이 모두 한 단계로 완료됩니다.

    R8에서는 디슈가링, 축소, 난독화, 최적화, 덱싱이 모두 하나의 컴파일 단계에서 실행됩니다.

    주의 사항: R8은 기존 ProGuard 규칙과 호환하도록 설계되었으므로 별다른 조치 없이 R8의 이점을 얻을 수 있습니다. 그러나 R8은 Android 프로젝트용으로 특별히 설계된 ProGuard와는 다른 기술이기 때문에 축소 및 최적화로 인해 ProGuard에 없는 코드가 삭제될 수 있습니다. 이러한 상황이 발생하는 만약의 경우 코드를 빌드 출력에 유지하기 위해 규칙을 추가해야 할 수도 있습니다.

    R8을 사용하면서 문제가 발생할 경우 R8 호환성 FAQ를 읽고 문제 해결 방법이 있는지 확인하세요. 해결 방법이 문서화되지 않은 경우 버그를 신고하세요. 프로젝트의 gradle.properties 파일에 다음 행 중 하나를 추가하여 R8을 사용 중지할 수 있습니다.

    # Disables R8 for Android Library modules only.
        android.enableR8.libraries = false
        # Disables R8 for all modules.
        android.enableR8 = false
        
  • ndkCompile 지원이 중단됨: 이제 ndkBuild를 사용하여 기본 라이브러리를 컴파일하려고 하면 빌드 오류가 발생합니다. 프로젝트에 C 및 C++ 코드를 추가하려면 대신 CMake 또는 ndk-build를 사용해야 합니다.

알려진 문제

  • 고유한 패키지 이름의 올바른 사용법은 현재 적용되지 않지만 이후 버전의 플러그인에서 엄격하게 적용될 예정입니다. Android Gradle 플러그인 버전 3.4.0에서는 아래 행을 gradle.properties 파일에 추가하여 프로젝트가 허용되는 패키지 이름을 선언하는지 여부를 검사하도록 선택할 수 있습니다.

    android.uniquePackageNames = true
        

    Android Gradle 플러그인을 통한 패키지 이름 설정에 관해 자세히 알아보려면 애플리케이션 ID 설정을 참조하세요.

3.3.0(2019년 1월)

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

3.3.2(2019년 3월)

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

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으로 다운그레이드하지 않으므로 오류가 발생합니다. 자세한 내용은 클래스 경로 간 충돌 해결을 참조하세요.

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

    • 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)이상을 타겟팅하는 앱 번들에서 생성된 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은 다음 문제를 해결합니다.

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

3.2.0(2018년 9월)

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

3.2.1(2018년 10월)

이 업데이트를 통해 더 이상 SDK 빌드 도구의 버전을 지정하지 않아도 됩니다. 이제 Android Gradle 플러그인이 기본적으로 버전 28.0.3을 사용합니다.

새로운 기능

  • Android App Bundle 빌드 지원: 앱 번들은 모든 앱의 컴파일된 코드와 리소스를 포함하지만 APK 생성 및 Google Play 스토어 서명은 지연시키는 새로운 업로드 포맷입니다. 더 이상 여러 APK를 빌드, 서명, 관리할 필요가 없으며 사용자는 기기에 최적화된 작은 용량을 다운로드합니다. 자세한 내용은 Android App Bundles 정보를 읽어보세요.

  • 주석 프로세서 사용 시 개선된 증분 빌드 속도 지원: 이제 AnnotationProcessorOptions DSL이 CommandLineArgumentProvider를 확장하여 사용자나 주석 프로세서 저자가 증분 빌드 속성 유형 주석을 사용하는 프로세서의 인수에 주석을 달 수 있습니다. 이러한 주석을 사용하면 증분 및 캐시된 클린 빌드의 정확성과 성능이 개선됩니다. 자세한 내용은 주석 프로세서에 인수 전달을 읽어보세요.

  • AndroidX용 이전 도구: Android 3.2 이상에서 Android Gradle 플러그인 3.2.0을 사용하는 경우 메뉴 바에서 Refactor > Migrate to AndroidX를 선택하여 프로젝트의 로컬 및 Maven 종속성을 이전해 새로운 AndroidX 라이브러리를 사용할 수 있습니다. 이 이전 도구를 사용하면 gradle.properties 파일에서 다음 플래그를 true로 설정하기도 합니다.

    • android.useAndroidX: true로 설정하면 Android 플러그인은 지원 라이브러리 대신 적절한 AndroidX 라이브러리를 사용합니다. 이 플래그를 지정하지 않으면 Android 플러그인은 기본적으로 false로 설정합니다.
    • android.enableJetifier: true로 설정하면 Android 플러그인은 바이너리를 다시 작성해 기존 타사 라이브러리를 자동으로 이전하여 AndroidX를 사용합니다. 이 플래그를 지정하지 않으면 Android 플러그인은 기본적으로 false로 설정합니다. android.useAndroidXtrue로 설정한 경우에만 이 플래그를 true로 설정할 수 있고 그렇지 않으면 빌드 오류가 발생합니다.

    자세한 내용은 AndroidX 개요를 읽어보세요.

  • 새로운 코드 축소기 R8: R8은 ProGuard를 대체하는 코드 축소 및 난독화를 위한 새로운 도구입니다. 프로젝트의 gradle.properties 파일에 다음을 포함하여 R8의 미리보기 버전을 사용할 수 있습니다.

    android.enableR8 = true
        

동작 변경사항

  • D8을 사용한 디슈가링이 기본적으로 사용 설정됩니다.
  • 이제 AAPT2가 Google의 Maven 저장소에 있습니다. AAPT2를 사용하려면 아래와 같이 build.gradle 파일에 google() 종속성이 있는지 확인하세요.

    buildscript {
              repositories {
                  google() // here
                  jcenter()
              }
              dependencies {
                  classpath 'com.android.tools.build:gradle:3.2.0'
              }
          }
          allprojects {
              repositories {
                  google() // and here
                  jcenter()
          }
        
  • 이제 네이티브 multidex가 기본적으로 사용 설정됩니다. 이전 버전의 Android 스튜디오에서는 Android API 레벨 21 이상을 실행하는 기기에 앱의 디버그 버전을 배포할 때 네이티브 multidex를 사용 설정했습니다. 이제 기기에 배포하든 출시용 APK를 빌드하든 Android Gradle 플러그인이 minSdkVersion=21 이상을 설정한 모든 모듈에 네이티브 multidex를 사용 설정합니다.

  • 이제 플러그인이 최소 버전의 protobuf 플러그인(0.8.6), Kotlin 플러그인(1.2.50), Crashlytics 플러그인(1.25.4)을 시행합니다.

  • 이제 기능 모듈 플러그인 com.android.feature가 모듈 이름을 지정할 때 문자, 숫자, 밑줄만을 사용하게 합니다. 예를 들어 기능 모듈 이름에 대시가 포함된 경우 빌드 에러가 발생합니다. 이 동작은 동적 기능 모듈 플러그인의 동작과 일치합니다.

버그 수정

  • 이제 JavaCompile이 데이터 결합이 있는 프로젝트에서 캐시 가능합니다. (문제 #69243050)
  • 데이터 결합이 있는 라이브러리 모듈에 관한 컴파일 방지가 개선됩니다. (문제 #77539932)
  • 일부 예기치 않은 빌드 오류로 인해 이전 버전에서 사용 중지한 경우 이제 configure-on-demand를 다시 사용 설정할 수 있습니다. (문제 #77910727)

3.1.0(2018년 3월)

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

  • Gradle 4.4 이상. 자세한 내용은 Gradle 업데이트하기 섹션을 읽어보세요.
  • 빌드 도구 27.0.3 이상. 주의 사항: android.buildToolsVersion 속성을 사용하여 빌드 도구의 버전을 더 이상 지정하지 않아도 됩니다. 플러그인은 필요한 최소 버전을 기본적으로 사용합니다.

새로운 DEX 컴파일러, D8

이제 Android 스튜디오는 D8이라 부르는 새로운 DEX 컴파일러를 기본적으로 사용합니다. DEX 컴파일은 Android 런타임 또는 이전 버전 Android의 Dalvik에서 .class 바이트코드를 .dex 바이트코드로 변환하는 프로세스입니다. 이전 컴파일러 DX와 비교할 때 D8은 더 빠르게 컴파일하고 더 작은 DEX 파일을 출력하면서 앱 런타임 성능은 동일하거나 더 좋게 유지합니다.

D8은 일상적인 앱 개발 워크플로를 변경하지 않습니다. 그러나 새로운 컴파일러와 관련된 문제가 발생하면 버그를 신고하세요. 프로젝트의 gradle.properties 파일에 다음을 포함하여 D8을 일시적으로 사용 중지하고 DX를 사용할 수 있습니다.

android.enableD8=false
    

자바 8 언어 기능을 사용하는 프로젝트의 경우 증분 디슈가링이 기본적으로 사용 설정됩니다. 프로젝트의 gradle.properties 파일에 다음을 지정하여 사용 중지할 수 있습니다.

android.enableIncrementalDesugaring=false.
    

미리보기 사용자: 이미 D8의 미리보기 버전을 사용하고 있다면 이제 JDK가 아니라 SDK 빌드 도구에 포함된 라이브러리에서 컴파일합니다 따라서 JDK에는 있지만 SDK 빌드 도구 라이브러리에는 없는 API에 액세스하는 경우 컴파일 오류가 발생합니다.

동작 변경사항

  • 각각 다른 ABI를 타겟팅하는 여러 APK를 빌드하는 경우 플러그인이 더 이상 다음과 같은 ABI용 APK를 기본적으로 생성하지 않습니다(예: mips, mips64, armeabi).

    이러한 ABI를 타겟팅하는 APK를 빌드하려면 NDK r16b 이하를 사용하고 아래와 같이 build.gradle 파일에 ABI를 지정해야 합니다.

        splits {
          abi {
              include 'armeabi', 'mips', 'mips64'
              ...
          }
        }
        

  • Android 인스턴트 앱의 구성 APK를 빌드하는 경우 이제 언어 구성 분할이 기본적으로 루트 언어별로 그룹화됩니다. 예를 들어 앱에 zh-TW 또는 zh-CN 언어 리소스가 포함된 경우 Gradle이 그와 같은 리소스를 zh 언어 구성 분할로 패키징합니다. 아래와 같이 include 속성을 사용하여 자체 그룹을 정의함으로써 이 동작을 재정의할 수 있습니다.

    splits {
            language {
                enable true
                // Each string defines a group of locales that
                // Gradle should package together.
                include "in,id",
                        "iw,he",
                        "fil,tl,tgl",
                        "yue,zh,zh-TW,zh-CN"
            }
        }
        
  • 이제 Android 플러그인의 빌드 캐시가 30일 이상 된 캐시 항목을 제거합니다.

  • "auto"resConfig로 전달하면 더 이상 자동으로 문자열 리소스를 선택하여 APK에 패키징하지 않습니다. 계속해서 "auto"를 사용하면 플러그인이 앱과 앱의 종속성이 제공하는 모든 문자열 리소스를 앱에 패키징합니다. 따라서 플러그인이 APK에 패키징하길 원하는 각 언어를 대신 지정해야 합니다.

  • 로컬 모듈은 앱의 테스트 APK에 의존할 수 없기 때문에 androidTestImplementation 대신 androidTestApi 구성을 사용하여 계측 테스트에 종속성을 추가하면 Gradle에서 다음과 같은 경고가 발생합니다.

      WARNING: Configuration 'androidTestApi' is obsolete
          and has been replaced with 'androidTestImplementation'
        

수정

  • Android 스튜디오가 복합 빌드의 종속성을 적절히 인식하지 못하는 경우의 문제 해결
  • 단일 빌드에서 Android 플러그인을 여러 번 로드할 때 프로젝트 동기화 오류가 발생하는 경우의 문제 해결. 예: 여러 하위 프로젝트가 빌드스크립트 클래스 경로에 Android 플러그인을 각각 포함하는 경우

3.0.0(2017년 10월)

Android Gradle 플러그인 3.0.0에는 대규모 프로젝트의 성능 문제를 해결하려는 다양한 변경사항이 포함됩니다.

예를 들어 ~130개의 모듈과 수많은 외부 종속성이 있고 코드나 리소스는 없는 샘플 골격 프로젝트에서 다음과 유사한 성능 개선을 경험할 수 있습니다.

Android 플러그인 버전 + Gradle 버전 Android 플러그인 2.2.0 + Gradle 2.14.1 Android 플러그인 2.3.0 + Gradle 3.3 Android 플러그인 3.0.0 + Gradle 4.1
구성(예: ./gradlew --help 실행하기) ~2분 ~9초 ~2.5초
한 줄 자바 변경(구현 변경) ~2분 15초 ~29초 ~6.4초

이러한 변경사항의 일부는 기존 빌드를 손상합니다. 따라서 새로운 플러그인을 사용하기 전에 프로젝트의 이전을 고려해야 합니다.

위에 설명한 성능 개선이 발생하지 않으면 버그를 신고 하고 Gradle Profiler를 사용하여 빌드의 트레이스를 포함하세요.

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

  • Gradle 4.1 이상. 자세한 내용은 Gradle 업데이트하기 섹션을 읽어보세요.
  • 빌드 도구 26.0.2 이상. 이 업데이트를 통해 빌드 도구의 버전을 더 이상 지정하지 않아도 됩니다. 플러그인은 필요한 최소 버전을 기본적으로 사용합니다. 따라서 이제 android.buildToolsVersion 속성을 삭제할 수 있습니다.

3.0.1(2017년 11월)

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

최적화

  • 세밀한 작업 그래프를 통해 다중 모듈 프로젝트의 동시 로드를 개선합니다.
  • 종속성을 변경할 때 Gradle은 종속성의 API에 액세스 권한이 없는 모듈을 다시 컴파일하지 않음으로써 더 빠르게 빌드합니다. Gradle의 새로운 종속성 구성을 사용(implementation, api, compileOnly, runtimeOnly)하여 다른 모듈에 API를 유출하는 종속성을 제한해야 합니다.
  • 클래스별 덱싱으로 인해 증분 빌드 속도가 더 빨라집니다. 이제 각 클래스가 별도의 DEX 파일로 컴파일되며 수정된 클래스만 re-dex됩니다. minSdkVersion를 20 이하로 설정하고 레거시 multi-dex를 사용하는 앱의 빌드 속도도 개선됩니다.
  • 특정 작업을 최적화함으로써 빌드 속도를 개선하여 캐시된 출력을 사용합니다. 이 최적화의 이점을 얻으려면 먼저 Gradle 빌드 캐시를 사용 설정해야 합니다.
  • AAPT2를 사용하여 증분 리소스 처리를 개선하며 이제 이것은 기본적으로 사용 설정됩니다. AAPT2를 사용하는 동안 문제가 발생하면 버그를 신고하세요. gradle.properties 파일에 android.enableAapt2=false를 설정하고 명령줄에서 ./gradlew --stop를 실행하여 Gradle 데몬을 다시 시작함으로써 AAPT2를 사용 중지할 수도 있습니다.

새로운 기능

  • 변형 인식 종속성 관리. 모듈의 특정 변형을 빌드할 때 이제 플러그인이 로컬 라이브러리 모듈 종속성의 변형을 빌드 중인 모듈의 변형과 자동으로 일치시킵니다.
  • 새로운 기능 모듈 플러그인을 포함하여 Android 인스턴트 앱SDK 관리자를 사용해 다운로드할 수 있는 Android 인스턴트 앱 SDK를 지원합니다. 새로운 플러그인으로 기능 모듈을 생성하는 방법에 관한 자세한 내용은 여러 기능이 있는 인스턴트 앱의 구조를 읽어보세요.
  • 특정 자바 8 언어 기능 및 자바 8 라이브러리 사용을 위한 지원이 내장됩니다. 이제 Jack은 지원 중단되고 더 이상 필요하지 않으므로 먼저 Jack를 사용 중지하여 기본 도구 모음에 빌드된 개선된 자바 8 지원을 사용해야 합니다. 자세한 내용은 자바 8 언어 기능 사용을 읽어보세요.
  • Android Test Orchestrator로 실행하는 테스트를 추가로 지원하여 앱의 자체 Instrumentation 호출 내에서 각 앱의 테스트를 실행할 수 있습니다. 각 테스트는 자체 Instrumentation 인스턴스에서 실행되므로 테스트 간의 공유 상태가 기기의 CPU나 메모리에 누적되지 않습니다. 테스트 하나가 비정상 종료되더라도 자체 Instrumentation 인스턴스만 중단하므로 다른 테스트는 계속 실행됩니다.
    • testOptions.execution를 추가하여 기기 내 테스트 조정의 사용 여부를 판단합니다. Android Test Orchestrator를 사용하려면 아래와 같이 ANDROID_TEST_ORCHESTRATOR를 지정해야 합니다. 이 속성은 기본적으로 HOST로 설정되며 기기 내 조정을 사용 중지하고 테스트를 실행하는 표준 메서드입니다.
    android {
      testOptions {
        execution 'ANDROID_TEST_ORCHESTRATOR'
      }
    }
    
* 새로운 `androidTestUtil` 종속성 구성으로 Android Test Orchestrator와 같은 계측 테스트를 실행하기 전에 다른 테스트 도우미 APK를 설치할 수 있습니다.
    dependencies {
      androidTestUtil 'com.android.support.test:orchestrator:1.0.0'
      ...
    }
    
* `testOptions.unitTests.includeAndroidResources`를 추가하여 Android 리소스가 필요한 단위 테스트를 지원합니다(예: [Roboelectric](http://robolectric.org/)). 이 속성을 `true`로 설정하면 플러그인은 단위 테스트를 실행하기 전에 리소스와 애셋, 매니페스트 병합을 이행합니다. 그런 다음 테스트에서 다음 키가 있는지 클래스 경로의 `com/android/tools/test_config.properties`를 검사할 수 있습니다. * `android_merged_assets`: 병합된 애셋 디렉터리로 가는 절대 경로입니다.

참고: 라이브러리 모듈의 경우 병합된 애셋에는 종속성 애셋이 포함되지 않습니다([문제 #65550419](https://issuetracker.google.com/65550419)를 참조하세요)).

* `android_merged_manifest`: 병합된 매니페스트 파일로 가는 절대 경로입니다. * `android_merged_resources`: 모듈의 모든 리소스 및 모든 종속성을 포함하는 병합된 리소스 디렉터리로 가는 절대 경로입니다. * `android_custom_package`: 최종 R 클래스의 패키지 이름입니다. 동적으로 애플리케이션 ID를 수정하면 이 패키지 이름은 앱의 매니페스트에 있는 `package` 속성과 일치하지 않을 수 있습니다. * [리소스로 글꼴] 지원입니다(/guide/topics/ui/look-and-feel/fonts-in-xml.html). 이것은 [Android 8.0 (API 레벨 26)]에 도입된 새로운 기능입니다(/about/versions/oreo/index.html). * [Android 인스턴트 앱 SDK 1.1](/topic/instant-apps/release-notes.html#android_instant_apps_development_sdk_v110) 이상에서 언어별 APK를 지원합니다. 자세한 내용은 [순수 분할을 위한 빌드 구성](/topic/instant-apps/guides/config-splits.html)을 참조하세요. * 이제 아래와 같이 외부 네이티브 빌드 프로젝트의 출력 디렉터리를 변경할 수 있습니다.
    android {
        ...
        externalNativeBuild {
            // For ndk-build, instead use the ndkBuild block.
            cmake {
                ...
                // Specifies a relative path for outputs from external native
                // builds. You can specify any path that's not a subdirectory
                // of your project's temporary build/ directory.
                buildStagingDirectory "./outputs/cmake"
            }
        }
    }
    
* 이제 Android 스튜디오에서 네이티브 프로젝트를 빌드할 때 [CMake 3.7 이상을 사용](/studio/projects/add-native-code.html#vanilla_cmake)할 수 있습니다. * 새로운 `lintChecks` 종속성 구성으로 사용자설정 lint 규칙을 정의하는 JAR을 빌드하고 AAR 및 APK 프로젝트에 패키징할 수 있습니다. 사용자설정 lint 규칙은 단일 JAR을 출력하고 [`compileOnly`](https://docs.gradle.org/current/userguide/java_plugin.html#sec:java_plugin_and_dependency_management) 종속성만 포함하는 별도의 프로젝트에 속해야 합니다. 그러면 다른 앱 및 라이브러리 모듈이 `lintChecks` 구성을 사용하여 lint 프로젝트에 종속할 수 있습니다.
    dependencies {
        // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
        // and package it with your module. If the module is an Android library,
        // other projects that depend on it automatically use the lint checks.
        // If the module is an app, lint includes these rules when analyzing the app.
        lintChecks project(':lint-checks')
    }
    

동작 변경사항

  • Android 플러그인 3.0.0은 특정 API를 삭제하여 이를 사용하면 빌드가 손상됩니다. 예를 들어 더 이상 변형 API를 사용하여 outputFile() 개체에 액세스하거나 processManifest.manifestOutputFile()을 사용하여 각 변형의 매니페스트 파일을 얻을 수 없습니다. 자세한 내용은 API 변경사항을 읽어보세요.
  • 더 이상 빌드 도구의 버전을 지정할 필요가 없으므로 이제 android.buildToolsVersion 속성을 삭제할 수 있습니다. 기본적으로 플러그인은 사용하고 있는 Android 플러그인 버전에 필요한 빌드 도구의 최소 버전을 자동으로 사용합니다.
  • 이제 아래와 같이 buildTypes 블록에서 PNG 크런칭을 사용 설정합니다. PNG 크런칭은 디버그 빌드를 제외한 모든 빌드에 기본적으로 사용 설정되는데 그 이유는 많은 PNG 파일을 포함한 프로젝트의 빌드 시간이 증가하기 때문입니다. 따라서 다른 빌드 유형의 빌드 시간을 개선하려면 PNG 크런칭을 사용 중지하거나 이미지를 WebP로 변환해야 합니다.
    android {
      buildTypes {
        release {
          // Disables PNG crunching for the release build type.
          crunchPngs false
        }
      }
    }
    
* 이제 Android 플러그인이 외부 CMake 프로젝트에서 구성한 실행 가능한 타켓을 자동으로 빌드합니다. * 이제 'annotationProcessor' 종속성 구성을 사용하여 프로세서 클래스 경로에 [주석 프로세서를 추가](/studio/build/dependencies#annotation_processor)해야 합니다. * 지원 중단된 `ndkCompile` 사용이 더 제한됩니다. 대신 CMake나 ndk-build를 사용하여 APK로 패키징하려는 네이티브 코드를 컴파일하여 이전해야 합니다. 자세한 내용은 [ndkcompile에서 이전](/studio/projects/add-native-code.html#ndkCompile)을 읽어보세요. ## 2.3.0 (2017년 2월) {:#2-3-0}

2.3.3(2017년 6월)

이번 소규모 업데이트에는 Android 스튜디오 2.3.3과의 호환성이 추가됩니다.

2.3.2(2017년 5월)

이번 소규모 업데이트에는 Android 스튜디오 2.3.2와의 호환성이 추가됩니다.

2.3.1(2017년 4월)

이번 Android 플러그인 2.3.0의 업데이트는 일부 실제 Android 기기가 Instant Run과 제대로 호환되지 않을 경우의 문제를 해결합니다(문제 #235879를 참조하세요).

종속성:
신규:
  • 성능 개선 및 새로운 기능이 포함된 Gradle 3.3을 사용합니다. 자세한 내용은 Gradle 출시 노트를 참조하세요.
  • 빌드 캐시: 프로젝트를 빌드할 때 Android 플러그인이 생성하는 특정 출력을 저장합니다(예: 패키징되지 않은 AAR, pre-dexed 원격 종속성). 클린 빌드는 캐시를 사용하는 동안 훨씬 더 빠릅니다. 그 이유는 빌드 시스템이 후속 빌드 중에 캐시된 파일을 다시 생성하지 않고 재사용할 수 있기 때문입니다. Android 플러그인 2.3.0 이상을 사용하는 프로젝트는 기본적으로 빌드 캐시를 사용합니다. 자세한 내용은 빌드 캐시로 빌드 속도 개선을 읽어보세요.
변경사항:
## 2.2.0(2016년 9월) {:#2-2-0}
종속성:
신규:
  • 성능 개선 및 새로운 기능을 포함하는 Gradle 2.14.1을 사용하고 Gradle 데몬을 사용할 때 로컬 권한 에스컬레이션을 허용하는 보안 취약점을 해결합니다. 자세한 내용은 Gradle 출시 노트를 참조하세요.
  • externalNativeBuild {} DSL을 사용하여 이제 Gradle로 네이티브 소스에 연결하고 CMake나 ndk-build를 사용하여 네이티브 라이브러리를 컴파일할 수 있습니다. 네이티브 라이브러리를 빌드하고 나면 Gradle은 APK로 이를 패키징합니다. Gradle로 CMake 및 ndk-build를 사용하는 방법에 관한 자세한 내용은 프로젝트에 C 및 C++ 코드 추가를 읽어보세요.
  • 명령줄에서 빌드를 실행하면 이제 Gradle이 누락된 SDK 구성요소나 프로젝트가 종속하는 업데이트를 자동 다운로드하려고 시도합니다. 자세한 내용은 Gradle로 누락된 패키지 자동 다운로드를 읽어보세요.
  • 새로운 실험용 캐싱 기능으로 Gradle이 pre-dexed 버전 라이브러리를 pre-dexing, 저장, 재사용하여 빌드 시간을 단축할 수 있습니다. 이 실험용 기능 사용에 관한 자세한 내용은 빌드 캐시 가이드를 읽어보세요.
  • 작업 한 번으로 압축과 서명, zipaligning을 처리하는 새로운 기본 패키징 파이프라인을 채택해 빌드 성능을 개선합니다. gradle.properties 파일에 android.useOldPackaging=true을 추가하여 이전 패키징 도구 사용으로 되돌릴 수 있습니다. 새로운 패키징 도구를 사용하는 동안 zipalignDebug 작업은 사용할 수 없습니다. 그러나 createZipAlignTask(String taskName, File inputFile, File outputFile) 메서드를 호출하여 직접 그 작업을 생성할 수 있습니다.
  • 이제 APK 서명이 기본 JAR 서명 외에도 APK Signature Scheme v2를 사용합니다. 모든 Android 플랫폼이 그 결과로 발생하는 APK를 허용합니다. 서명 후 이러한 APK를 수정하면 v2 서명이 무효화되고 기기에 설치되지도 않습니다. 이 기능을 사용 중지하려면 모듈 레벨 build.gradle 파일에 다음을 추가하세요.
        android {
          ...
          signingConfigs {
            config {
              ...
              v2SigningEnabled false
            }
          }
        }
        
  • multidex 빌드의 경우 이제 ProGuard 규칙을 사용하여 Gradle이 앱의 기본 DEX 파일로 컴파일해야 할 클래스를 결정할 수 있습니다. 앱을 시작할 때 Android 시스템이 기본 DEX 파일을 먼저 로드하기 때문에 시작 시 특정 클래스를 기본 DEX 파일로 컴파일하여 우선순위를 정할 수 있습니다. 기본 DEX 파일용으로 특별히 ProGuard 구성 파일을 생성한 후 buildTypes.multiDexKeepProguard을 사용하여 구성 파일의 경로를 Gradle로 전달합니다. 이 DSL을 사용하는 것은 buildTypes.proguardFiles을 사용하는 것과 다르며 앱의 일반적인 ProGuard 규칙을 제공하지만 기본 DEX 파일의 클래스를 지정하지는 않습니다.
  • android:extractNativeLibs 플래그 지원을 추가하여 기기에 앱을 설치할 때 앱의 크기를 줄일 수 있습니다. 앱 매니페스트의 <application> 요소에서 이 플래그를 false로 설정하면 Gradle이 APK로 압축되지 않고 정렬된 버전의 네이티브 라이브러리를 패키징합니다. 이로써 설치하는 동안 PackageManager가 네이티브 라이브러리를 APK에서 기기의 파일 시스템으로 복사할 수 없고 앱의 델타 업데이트 용량이 적어지는 추가 혜택이 있습니다.
  • 이제 제품 버전에 versionNameSuffixapplicationIdSuffix를 지정할 수 있습니다 (문제 59614).
변경사항:
  • 이제 getDefaultProguardFile이 Gradle용 Android 플러그인이 제공하는 기본 ProGuard 파일을 반환하고 더 이상 Android SDK의 파일을 사용하지 않습니다.
  • Jack 컴파일러 성능 및 기능을 개선합니다.
    • testCoverageEnabledtrue로 설정할 때 이제 Jack이 Jacoco 테스트 대상 범위를 지원합니다.
    • 주석 프로세서 지원을 개선합니다. 클래스 경로의 주석 프로세서(예: compile 종속성)가 빌드에 자동으로 적용됩니다. 모듈 레벨 build.gradle 파일에서 javaCompileOptions.annotationProcessorOptions {} DSL을 사용하여 빌드에 주석 프로세서를 지정하고 인수를 전달할 수도 있습니다.
          android {
            ...
            defaultConfig {
              ...
              javaCompileOptions {
                annotationProcessorOptions {
                  className 'com.example.MyProcessor'
                  // Arguments are optional.
                  arguments = [ foo : 'bar' ]
                }
              }
            }
          }
          

      컴파일 시 주석 프로세서를 적용하고 APK에는 이를 포함하지 않으려면 annotationProcessor 종속성 범위를 사용하세요.

          dependencies {
              compile 'com.google.dagger:dagger:2.0'
              annotationProcessor 'com.google.dagger:dagger-compiler:2.0'
             // or use buildVariantAnnotationProcessor to target a specific build variant
          }
          
    • jackOptions.additionalParameters()를 사용하여 Jack에 추가 플래그를 설정할 수 있습니다. 다음 코드 스니펫은 jack.incremental 매개변수를 true로 설정합니다.
          android {
            defaultConfig {
              ...
              jackOptions {
                enabled true
                additionalParameters("jack.incremental" : true)
              }
            }
          }
          

      설정할 수 있는 매개변수 목록을 보려면 명령줄에서 다음을 실행하세요.

          java -jar /build-tools/jack.jar --help-properties
          

    • 기본적으로 Gradle 데몬의 힙 크기가 1.5GB 이상이면 이제 Jack이 Gradle과 같은 프로세스에서 실행됩니다. 데몬 힙 크기를 조정하려면 다음을 gradle.properties 파일에 추가하세요.

          # This sets the daemon heap size to 1.5GB.
          org.gradle.jvmargs=-Xmx1536M
          

2.1.0 (2016년 4월)

2.1.3 (2016년 8월)

이 업데이트에는 Gradle 2.14.1 이상이 필요합니다. Gradle 2.14.1에는 성능 개선, 새로운 기능, 중요한 보안 수정사항이 포함됩니다. 자세한 내용은 Gradle 출시 노트를 참조하세요.

종속성:
신규:
  • Jack 도구 모음을 사용하여 N 개발자 미리보기인 JDK8과 자바 8 언어 기능의 지원을 추가합니다. 자세한 내용은 N 미리보기 가이드를 읽어보세요.

    참고: Instant Run은 현재 Jack과 호환되지 않으며 새로운 도구 모음을 사용하는 동안 사용 중지됩니다. N 미리보기용으로 개발 중이고 지원되는 자바 8 언어 기능을 사용하려는 경우에만 Jack을 사용해야 합니다.

  • 증분 자바 컴파일에 관한 기본 지원을 추가하여 개발하는 동안 컴파일 시간을 단축합니다. 변경되었거나 다시 컴파일해야 하는 소스 부분만 다시 컴파일하여 시간을 단축합니다. 이 기능을 사용 중지하려면 다음 코드를 모듈 레벨 build.gradle 파일에 추가하세요.
        android {
          ...
          compileOptions {
            incremental false
          }
        }
        
  • 별도의 외부 VM 프로세스가 아닌 빌드 프로세스 내에서 덱싱을 이행하는 dexing-in-process의 지원을 추가합니다. 이로 인해 증분 빌드가 빨라질 뿐만 아니라 전체 빌드 속도도 개선됩니다. 이 기능은 Gradle 데몬의 최대 힙 크기를 2048MB 이상으로 설정한 프로젝트에 기본적으로 사용 설정됩니다. 프로젝트의 gradle.properties 파일에 다음을 포함하여 이를 이행할 수 있습니다.

        org.gradle.jvmargs = -Xmx2048m
        

    모듈 레벨 build.gradle 파일에서 javaMaxHeapSize 값을 정의한 경우 org.gradle.jvmargsjavaMaxHeapSize + 1024 MB 값으로 설정해야 합니다. 예를 들어 javaMaxHeapSize를 '2048m'으로 설정한 경우 프로젝트의 gradle.properties 파일에 다음을 추가해야 합니다.

        org.gradle.jvmargs = -Xmx3072m
        

    dexing-in-process를 사용 중지하려면 모듈 레벨 build.gradle 파일에 다음 코드를 추가하세요.

        android {
          ...
          dexOptions {
              dexInProcess false
          }
        }
        

2.0.0 (2016년 4월)

종속성:
신규:
  • 바이트코드 삽입을 지원하고 에뮬레이터나 실제 기기에서 실행 중인 앱에 코드 및 리소스 업데이트를 푸시하여 Instant Run을 사용 설정합니다.
  • 앱이 실행되지 않는 경우에도 증분 빌드 지원을 추가합니다. Android 디버그 브리지를 통해 증분 변경사항을 연결된 기기에 푸시하여 전체 빌드 시간이 개선됩니다.
  • maxProcessCount를 추가하여 동시에 생성할 수 있는 최대 slave dex 프로세스 수를 제어합니다. 모듈 레벨 build.gradle 파일의 다음 코드는 최대 동시 프로세스 수를 4로 설정합니다.
        android {
          ...
          dexOptions {
            maxProcessCount = 4 // this is the default value
          }
        }
        
  • 실험용 코드 축소기를 추가하여 종속성의 pre-dexing을 지원하고 re-dexing을 줄이며 이것은 Proguard에서 지원되지 않습니다. 이로써 디버그 빌드 변형의 빌드 속도가 개선됩니다. 실험용 축소기가 최적화 및 난독화를 지원하지 않으므로 출시 빌드에 Proguard를 사용 설정해야 합니다. 디버그 빌드에 실험용 축소기를 사용 설정하려면 모듈 레벨 build.gradle 파일에 다음을 추가하세요.
        android {
          ...
          buildTypes {
            debug {
              minifyEnabled true
              useProguard false
            }
            release {
              minifyEnabled true
              useProguard true // this is a default setting
            }
          }
        }
        
  • 리소스 축소기의 로깅 지원 및 성능 개선을 추가합니다. 이제 리소스 축소기가 모든 작업을 Proguard 로그 파일과 동일한 폴더에 있는 resources.txt 파일에 기록합니다.
변경된 동작:
  • minSdkVersion이 18 이상으로 설정된 경우 APK 서명은 SHA256을 사용합니다.
  • 이제 DSA 및 ECDSA 키가 APK 패키지에 서명할 수 있습니다.

    참고: Android 키 저장소 제공자는 더 이상 API 레벨 23 이상인 Android 6.0의 DSA 키를 지원하지 않습니다.

해결된 문제:
  • 테스트 및 기본 빌드 구성 모두에서 AAR 종속성이 중복되는 문제가 해결되었습니다.

이전 출시