Android Gradle 플러그인 7.0.0(2021년 7월)

Android Gradle 플러그인 7.0.0은 다양한 새 기능과 개선사항이 포함된 주요 버전입니다.

7.0.1(2021년 8월)

이번 소규모 업데이트는 다양한 버그 수정을 포함합니다. 중요한 버그 수정 목록을 보려면 <ph type="x-smartling-placeholder"></ph> 출시 업데이트 블로그를 참고하세요.

호환성

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

AGP 7.0을 실행하려면 JDK 11이 필요함

Android Gradle 플러그인 7.0을 사용하여 앱을 빌드하는 경우 이제 Gradle을 실행하려면 JDK 11이 필요합니다. Android 스튜디오 Arctic Fox에서 JDK 11을 번들로 제공하고 Gradle을 기본적으로 사용하도록 Gradle을 구성합니다. 즉, 대부분의 Android 스튜디오 사용자는 프로젝트 구성을 변경할 필요가 없습니다.

수동으로 설정해야 하는 경우 Android 스튜디오 내 AGP에 사용되는 JDK 버전. JDK 11을 사용해야 함 또는 그 이상일 수 있습니다.

Android 스튜디오와는 별개로 AGP를 사용하는 경우 JAVA_HOME 환경 변수 또는 -Dorg.gradle.java.home 명령줄 옵션을 JDK 11의 설치 디렉터리로 설정하여 JDK 버전을 업그레이드합니다.

지원 중단된 SDK 도구 패키지의 SDK Manager 및 AVD Manager는 JDK 11에서 작동하지 않습니다. AGP 7.0 이상에서 SDK Manager와 AVD Manager를 계속 사용하려면 현재 사용 중인 Android SDK 명령줄 도구 패키지에서 새 버전의 도구로 전환해야 합니다.

변형 API가 안정적으로 실행됨

이제 새 Variant API가 안정적으로 실행됩니다. com.android.build.api.variant 패키지의 새로운 인터페이스와 gradle-recipes GitHub 프로젝트의 예를 참고하세요. 이번 변형 API에서는 인코더-디코더 아키텍처를 아티팩트 인터페이스에 추가되었습니다. 병합된 매니페스트와 같은 이러한 아티팩트는 서드 파티 플러그인과 코드를 사용하여 안전하게 가져오고 맞춤설정할 수 있습니다.

Google은 새로운 기능을 추가하고 맞춤설정에 사용할 수 있는 중간 아티팩트의 수를 늘려 Variant API를 계속 확장할 예정입니다.

린트의 동작 변경사항

이 섹션에서는 Android Gradle의 여러 린트 동작 변경사항을 설명합니다. 플러그인 7.0.0을 사용합니다.

라이브러리 종속 항목의 린트가 개선됨

이제 checkDependencies = true로 린트를 더 빠르게 실행합니다. 크게 향상되었습니다. 라이브러리 종속 항목이 있는 앱으로 구성된 Android 프로젝트의 경우 아래와 같이 checkDependenciestrue로 설정하고 ./gradlew :app:lint를 통해 린트를 실행하는 것이 좋습니다. 그러면 모든 종속 항목 모듈이 동시에 분석되고 앱과 모든 종속 항목에서 발생한 문제가 포함된 단일 보고서가 생성됩니다.

Groovy

// build.gradle
android {
  ...
  lintOptions {
    checkDependencies true
  }
}

Kotlin

// build.gradle.kts
android {
  ...
  lint {
    isCheckDependencies = true
  }
}

이제 린트 작업이 UP-TO-DATE일 수 있음

모듈의 소스 및 리소스가 변경되지 않은 경우 모듈에 관해 린트 분석 작업을 다시 실행할 필요가 없습니다. 이 경우 Gradle 출력에서 작업 실행이 'UP-TO-DATE'로 표시됩니다. 변경사항이 있을 때 checkDependencies = true인 애플리케이션 모듈에서 린트를 실행할 경우 변경된 모듈에서만 분석을 실행하면 됩니다. 그 결과, 린트가 훨씬 더 빠르게 실행될 수 있습니다.

입력이 변경되지 않은 경우에도 린트 보고서 작업을 실행할 필요가 없습니다. 관련된 알려진 문제는 린트가 없다는 것입니다. 린트 작업이 UP-TO-DATE일 때 stdout에 텍스트 출력이 출력됨 (문제 #191897708)

동적 기능 모듈에서 린트 실행

AGP는 더 이상 동적 기능 모듈에서의 린트 실행을 지원하지 않습니다. 해당 애플리케이션 모듈에서 린트를 실행하면 동적 기능 모듈을 확인하고 앱의 린트에 있는 모든 문제를 포함해야 함 보고서. 앱 모듈에서 checkDependencies = true인 상태에서 린트를 실행할 경우 동적 기능 라이브러리 종속 항목은 동시에 앱 종속 항목이 아닌 한, 검사되지 않는다는 관련 알려진 문제가 있습니다. (문제 #191977888)

기본 변형에 관해서만 린트 실행

이제 ./gradlew :app:lint를 실행하면 기본 변형입니다. 이전의 AGP 버전에서는 모든 변형에 린트를 실행했습니다.

R8 축소기에서 클래스 경고 누락

R8은 더 정확하고 누락된 클래스와 -dontwarn 옵션을 일관되게 처리합니다. 따라서 R8에서 생성된 누락 클래스의 경고부터 파악해야 합니다.

R8이 앱에 정의되지 않은 클래스 참조를 만나거나 종속 항목 중 하나가 되면 빌드에 표시되는 경고를 방출합니다. 출력됩니다. 예를 들면 다음과 같습니다.

R8: Missing class: java.lang.instrument.ClassFileTransformer

이 경고는 클래스 정의가 java.lang.instrument.ClassFileTransformer을(를) 찾을 수 없습니다. 자세히 알아볼 수 있습니다 일반적으로 이는 오류가 있음을 의미하지만 이 경고를 무시해도 괜찮은 경우가 있을 수 있습니다. 두 가지 일반적인 이유 경고를 무시하는 방법은 다음과 같습니다.

  1. JVM을 타겟팅하고 있는 라이브러리와 JVM 라이브러리 유형의 누락된 클래스임(위 예에서처럼)

  2. 종속 항목 중 하나가 컴파일 시간 전용 API를 사용함

proguard-rules.pro 파일에 -dontwarn 규칙을 추가하여 누락 클래스 경고를 무시할 수 있습니다. 예를 들면 다음과 같습니다.

-dontwarn java.lang.instrument.ClassFileTransformer

편의를 위해 AGP는 잠재적으로 모든 잠재적으로 포함된 예를 들어 다음과 같은 파일 경로에 해당 규칙을 씁니다. app/build/outputs/mapping/release/missing_rules.txt 경고를 무시하려면 proguard-rules.pro 파일에 규칙을 추가합니다.

AGP 7.0에서는 누락된 클래스 메시지가 경고로 표시되며 이를 통해 오류의 형식으로 android.r8.failOnMissingClasses = true인치 gradle.properties입니다. AGP 8.0에서는 이러한 경고가 오류가 발생할 수 있습니다 proguard-rules.pro 파일에 -ignorewarnings 옵션을 추가하여 AGP 7.0 동작을 유지할 수 있지만, 이는 권장되지 않습니다.

Android Gradle 플러그인 빌드 캐시 삭제됨

AGP 빌드 캐시는 AGP 4.1에서 삭제되었습니다. 이전에 AGP 2.3에서 Gradle 빌드 캐시를 보완하기 위해 도입된 AGP 빌드 캐시가 AGP 4.1에서는 Gradle 빌드 캐시로 완전히 대체되었습니다. 이 변경사항은 빌드 시간을 단축할 수 있습니다

AGP 7.0에서는 android.enableBuildCache 속성, android.buildCacheDir 속성, cleanBuildCache 작업이 삭제되었습니다.

프로젝트에서 자바 11 소스 코드 사용

이제 앱의 프로젝트에서 최대 Java 11 소스 코드를 컴파일하여 비공개 인터페이스 메서드, 익명 클래스의 경우 연산자, 람다 매개변수의 경우 로컬 변수 문법을 사용합니다.

이 기능을 사용 설정하려면 compileOptions를 원하는 값으로 설정하세요. Java 버전 및 compileSdkVersion를 30 이상으로 설정합니다.

// build.gradle
android {
  compileSdkVersion 30
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "11"
  }
}
// build.gradle.kts
android {
  compileSdkVersion(30)
  compileOptions {
    sourceCompatibility(JavaVersion.VERSION_11)
    targetCompatibility(JavaVersion.VERSION_11)
  }
  kotlinOptions {
    jvmTarget = "11"
  }
}

종속 항목 구성 삭제됨

AGP 7.0에서는 다음 구성(또는 종속 항목 범위)이 삭제되었습니다.

  • compile
    사용 사례에 따라 api 또는 implementation으로 대체되었습니다.
    *Compile 변형(예: debugCompile)에도 적용됩니다.
  • provided
    이는 compileOnly로 대체되었습니다.
    *Provided 변형(예: releaseProvided)에도 적용됩니다.
  • apk
    runtimeOnly로 대체되었습니다.
  • publish
    runtimeOnly로 대체되었습니다.

대부분의 경우 AGP 업그레이드 어시스턴트에서는 새 구성으로 프로젝트를 자동으로 이전합니다.

Android Gradle 플러그인에서 컴파일할 때 클래스 경로 변경

Android Gradle 플러그인에서 컴파일하는 경우 컴파일 클래스 경로가 변경될 수 있습니다. 이제 AGP가 내부적으로 api/implementation 구성을 사용하므로 컴파일 클래스 경로에서 일부 아티팩트가 삭제될 수 있습니다. 컴파일 시간에 AGP 종속 항목을 사용하는 경우 이를 명시적인 종속 항목으로 추가해야 합니다.

Java 리소스에 네이티브 라이브러리 추가 지원되지 않는 폴더

이전에는 네이티브 라이브러리를 Java 리소스 폴더에 추가할 수 있었으며 네이티브 라이브러리가 추출되어 최종 라이브러리에 추가되도록 android.sourceSets.main.resources.srcDirs 를 사용하여 폴더를 등록합니다. APK. AGP 7.0부터 이 기능은 지원되지 않으며 Java 리소스 폴더는 무시됩니다. 대신 네이티브 라이브러리용 DSL 메서드인 android.sourceSets.main.jniLibs.srcDirs를 사용하세요. 대상 자세한 내용은 구성 방법 소스 세트에 포함되어 있습니다.

알려진 문제

이 섹션에서는 Android Gradle 플러그인 7.0.0에서 발생한 알려진 문제에 관해 설명합니다.

1.4.x Kotlin 다중 플랫폼 플러그인과의 비호환성

Android Gradle 플러그인 7.0.0은 Kotlin 멀티플랫폼 플러그인 1.5.0 이상과 호환됩니다. Android Gradle 플러그인 7.0.0을 사용하려면 Kotlin 멀티플랫폼 지원을 사용하는 프로젝트를 Kotlin 1.5.0으로 업데이트해야 합니다. 이 문제를 해결하려면 Android Gradle 플러그인을 다운그레이드하면 됩니다. 4.2.x로 업그레이드할 수 있지만 권장하지는 않습니다.

자세한 내용은 KT-43944

린트 출력 누락

린트 작업이 실행될 때 stdout에 린트 텍스트 출력이 표시되지 않음 최신 (문제 #191897708) 자세한 내용은 다음을 참고하세요. 린트의 동작 변경사항 이 문제는 Android Gradle 플러그인 7.1에서 해결될 예정입니다.

일부 동적 기능 라이브러리 종속 항목이 린트 검사되지 않음

앱에서 checkDependencies = true인 린트를 실행하면 동적 기능 라이브러리 종속 항목은 앱의 종속 항목이기도 합니다 (문제 #191977888) 이 문제를 해결하려면 린트 작업을 동적 기능 라이브러리에서 실행하면 됩니다. 자세한 내용은 린트의 동작 변경사항을 참고하세요.