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은 람다를 비롯한 여러 최신 언어 기능에 대한 액세스를 제공합니다. 식, 메서드 참조, 정적 인터페이스 메서드 등 모두 포함됩니다. 전체 목록은 지원되는 기능의 자세한 내용은 자바 8 문서를 참조하세요.

이전 동작을 유지하려면 모듈 수준에서 자바 7을 명시적으로 지정하세요. build.gradle.kts 또는 build.gradle 파일:

// 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 v3 지원 및 APK 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 서명을 사용하면 ADB를 사용하여 대규모 APK를 빠르게 배포할 수 있습니다. 증분 APK 설치 Android 11 이 새 플래그는 배포 시 APK 서명 단계를 처리합니다. 프로세스입니다

변형당 앱 서명 구성

이제 Android Gradle에서 앱 서명을 사용 설정 또는 사용 중지할 수 있습니다. 사용할 수 있습니다.

이 예에서는 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, 등). 앱 모듈의 경우 <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을 실행하는 것을 권장하지만 Gradle을 실행하는 데 사용되는 JDK를 프로젝트 구조 대화상자 이 설정을 변경하면 Gradle을 실행하는 데 사용되는 JDK만 변경됩니다. 스튜디오 자체를 실행하는 데 사용되는 JDK를 변경하지 않습니다.

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

Android 스튜디오 4.2에서는 AGP 3.1 및 단, AGP가 Gradle 4.8.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 크기가 늘어나지만 다운로드 크기는 거의 동일합니다.

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

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

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

네이티브 라이브러리를 압축되지 않은 형식으로 패키징하는 것이 좋습니다. 앱 설치 크기가 줄어들고, 앱 다운로드 크기가 줄어들며, 앱 속도가 빨라집니다. 사용자 로드 시간을 단축할 수 있습니다. 그러나 Android Gradle 플러그인이 압축된 네이티브 라이브러리를 패키징하고 useLegacyPackaging 드림 앱의 build.gradle 파일에서 true에 추가합니다.

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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