Android Gradle 플러그인 4.2.0 (2021년 3월)

호환성

최소 버전 기본 버전 참고
Gradle 6.7.1 해당 사항 없음 자세한 내용은 Gradle 업데이트하기를 참고하세요.
SDK 빌드 도구 30.0.2 30.0.2 SDK 빌드 도구를 설치 또는 구성합니다.
NDK 해당 사항 없음 21.4.7075529 다른 버전의 NDK를 설치 또는 구성합니다.

새로운 기능

이 버전의 Android Gradle 플러그인에는 다음과 같은 새로운 기능이 포함됩니다.

기본 자바 언어 버전 8

버전 4.2부터 AGP는 기본적으로 자바 8 언어 수준을 사용합니다. Java 8을 통해 람다 표현식, 메서드 참조, 정적 인터페이스 메서드 등 여러 최신 언어 기능을 사용할 수 있습니다. 지원되는 기능의 전체 목록은 Java 8 문서를 참고하세요.

이전 동작을 유지하려면 모듈 수준 build.gradle.kts 또는 build.gradle 파일에 Java 7을 명시적으로 지정합니다.

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

새 JVM 리소스 컴파일러

Android Gradle 플러그인 4.2 도구의 새로운 JVM 리소스 컴파일러는 AAPT2 리소스 컴파일러의 일부를 대체하는 것으로, 특히 Windows 머신에서 빌드 성능을 개선할 수 있습니다. 새 JVM 리소스 컴파일러가 기본적으로 사용 설정됩니다.

이제 v3 및 v4 서명이 지원됨

이제 Android Gradle 플러그인 4.2는 APK v3APK v4 서명 형식을 지원합니다. 빌드에서 두 형식 중 하나 또는 둘 다를 사용 설정하려면 다음 속성을 모듈 수준 build.gradle 또는 build.gradle.kts 파일에 추가하세요.

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

APK v4 서명을 사용하면 Android 11에서 ADB 증분 APK 설치를 통해 대규모 APK를 빠르게 배포할 수 있습니다. 이 새 플래그는 배포 프로세스의 APK 서명 단계를 처리합니다.

변형당 앱 서명 구성

이제 변형당 Android Gradle 플러그인에서 앱 서명을 사용 설정 또는 사용 중지할 수 있습니다.

다음 예는 Kotlin이나 Groovy에서 onVariants() 메서드를 사용하여 변형당 앱 서명을 설정하는 방법을 보여줍니다.

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

새로운 Gradle 속성: android.native.buildOutput

빌드 출력에서 복잡함을 줄이기 위해 AGP 4.2는 CMakendk-build를 사용하는 네이티브 빌드의 메시지를 필터링하여 기본값으로 C/C++ 컴파일러 출력만 표시합니다. 이전에는 빌드된 모든 파일의 출력 줄이 생성되었으며, 이로 인해 정보 메시지의 양이 많았습니다.

네이티브 출력 전체를 보려면 새로운 Gradle 속성 android.native.buildOutputverbose로 설정하세요.

gradle.properties 파일 또는 명령줄을 통해 이 속성을 설정할 수 있습니다.

gradle.properties
android.native.buildOutput=verbose

명령줄
-Pandroid.native.buildOutput=verbose

이 속성의 기본값은 quiet입니다.

gradle.properties 파일의 동작 변경

AGP 4.2부터는 더 이상 하위 프로젝트에서 Gradle 속성을 재정의할 수 없습니다. 즉, 루트 프로젝트 대신 하위 프로젝트의 gradle.properties 파일에서 속성을 선언하면 이 속성이 무시됩니다.

예를 들어 이전 출시에서 AGP는 <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties 등에서 값을 읽었습니다. 앱 모듈의 경우 동일한 Gradle 속성이 <var>projectDir</var>/gradle.properties<var>projectDir</var>/app/gradle.properties 모두에 있으면 <var>projectDir</var>/app/gradle.properties의 값이 우선 적용됩니다.

AGP 4.2에서는 이 동작이 변경되었으며, AGP는 하위 프로젝트의 gradle.properties에서 값을 로드하지 않습니다 (예: <var>projectDir</var>/app/gradle.properties). 이 변경사항은 새로운 Gradle 동작을 반영하고 구성 캐싱을 지원합니다.

gradle.properties 파일의 값을 설정하는 방법에 관한 자세한 내용은 Gradle 문서를 참고하세요.

Gradle 호환성 및 구성 변경사항

Android 스튜디오에서 실행될 때 Gradle 빌드 도구는 스튜디오의 번들 JDK를 사용합니다. 이전 출시에서는 JDK 8이 스튜디오와 함께 번들로 제공되었습니다. 그러나 4.2에서는 이제 JDK 11이 대신 번들로 제공됩니다. 새 번들 JDK를 사용하여 Gradle을 실행하면 비호환성이 발생하거나 가비지 컬렉터의 변경사항으로 인해 JVM 성능에 영향을 미칠 수 있습니다. 이러한 문제는 아래에 설명되어 있습니다.

참고: JDK 11과 함께 Gradle을 실행하는 것이 좋지만 Project Structure 대화상자에서 Gradle을 실행하는 데 사용되는 JDK를 변경할 수 있습니다. 이 설정을 변경하면 Gradle을 실행하는 데 사용되는 JDK만 변경되며 스튜디오 자체를 실행하는 데 사용되는 JDK는 변경되지 않습니다.

Android Gradle 플러그인 (AGP)과 스튜디오 호환성

Android 스튜디오 4.2는 AGP가 Gradle 4.8.1 이상을 실행한다면 AGP 3.1 이상을 사용하는 프로젝트를 열 수 있습니다. Gradle 호환성에 관한 자세한 내용은 Gradle 업데이트를 참고하세요.

JDK 11의 Gradle 빌드 최적화

이번 JDK 11로의 업데이트는 JVM 가비지 컬렉터의 기본 구성에 영향을 미칩니다. JDK 8이 병렬 가비지 컬렉터를 사용하는 반면 JDK 11은 G1 가비지 컬렉터를 사용하기 때문입니다.

빌드 성능을 개선하려면 병렬 가비지 수집기로 Gradle 빌드를 테스트하는 것이 좋습니다. gradle.properties에서 다음을 설정합니다.

org.gradle.jvmargs=-XX:+UseParallelGC

다른 옵션이 이미 이 필드에 설정되어 있으면 새 옵션을 추가합니다.

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

다양한 구성으로 빌드 속도를 측정하려면 빌드 프로파일링을 참고하세요.

minSdk = 28 이상일 때는 APK로 압축되지 않는 DEX 파일

이제 AGP는 minSdk = 28 이상일 때 기본적으로 APK로 압축되지 않은 DEX 파일을 패키징합니다. 이로 인해 APK 크기가 증가하지만 기기에서의 설치 크기가 더 작아지기 때문에 다운로드 크기는 거의 동일합니다.

대신 AGP가 압축된 DEX 파일을 강제로 패키징하도록 하려면 build.gradle 파일에 다음을 추가하면 됩니다.

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

DSL을 사용하여 압축된 네이티브 라이브러리 패키징

네이티브 라이브러리를 압축되지 않은 형식으로 패키징하는 것이 좋습니다. 앱 설치 크기가 줄어들고 앱 다운로드 크기가 줄어들며 사용자의 앱 로드 시간이 단축되기 때문입니다. 그러나 앱을 빌드할 때 Android Gradle 플러그인이 압축된 네이티브 라이브러리를 패키징하도록 하려면 앱의 build.gradle 파일에서 useLegacyPackagingtrue로 설정합니다.

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

useLegacyPackaging 플래그는 매니페스트 속성 extractNativeLibs를 대체합니다. 자세한 내용은 기본적으로 압축되지 않은 상태로 패키징된 네이티브 라이브러리 출시 노트를 참고하세요.