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

Android Gradle 플러그인 7.0.0은 Android Gradle 플러그인의 다양한 확인할 수 있습니다.

7.0.1(2021년 8월)

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

호환성

최소 버전 기본 버전
Gradle 7.0.2 7.0.2
SDK 빌드 도구 30.0.2 30.0.2
NDK 해당 사항 없음 21.4.7075529
JDK 11 11

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

Android Gradle 플러그인 7.0을 사용하여 앱을 빌드할 때 JDK 11이 이제 추가되었습니다. 필요합니다. Android 스튜디오 Arctic Fox에서 JDK 11 및 기본적으로 Gradle을 사용하도록 구성합니다. 즉, 대부분의 Android 스튜디오는 프로젝트의 구성을 변경할 필요가 없습니다.

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

Android 스튜디오와는 별개로 AGP를 사용하는 경우 JAVA_HOME 환경 변수 설정 또는 -Dorg.gradle.java.home 명령줄 옵션 JDK 11의 설치 디렉터리에 추가합니다.

지원 중단된 SDK 도구 패키지의 SDK Manager 및 AVD Manager는 JDK 11에서 작동하지 않습니다. SDK Manager와 AVD Manager를 계속 사용하려면 다음 단계를 따르세요. AGP 7.0 이상을 사용하는 경우 현재 Android SDK 명령줄 도구 패키지를 참고하세요.

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

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

새로운 기능을 추가하여 Variant API를 계속 확장할 예정입니다. 인코더-디코더 아키텍처에 사용할 수 있는 중간 아티팩트의 수를 맞춤설정할 수 있습니다.

린트의 동작 변경사항

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

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

이제 checkDependencies = true로 린트를 더 빠르게 실행합니다. 크게 향상되었습니다. 라이브러리가 있는 앱으로 구성된 Android 프로젝트 종속 항목이 있는 경우 checkDependencies를 다음과 같이 설정하는 것이 좋습니다. true로 설정하고, 다음을 통해 린트를 실행합니다. ./gradlew :app:lint: 모든 종속 항목을 분석합니다. 여러 모듈을 병렬로 운영하여 모든 종속 항목이 포함됩니다

Groovy

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

Kotlin

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

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

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

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

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

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

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

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

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

R8은 더 정확하고 누락된 클래스와 -dontwarn 옵션을 일관되게 처리합니다. 따라서 내보낸 누락된 클래스 경고 평가를 시작해야 합니다. 알 수 있습니다.

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

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

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

  1. JVM을 타겟팅하는 라이브러리와 JVM의 누락된 클래스임 라이브러리 유형을 선택합니다 (위의 예시 참고).

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

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

-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에서는 이러한 경고가 오류가 발생할 수 있습니다 다음과 같은 방법으로 AGP 7.0 동작을 유지할 수 있습니다. -ignorewarnings 옵션을 proguard-rules.pro 파일을 사용하는 것이 좋지만 권장되지 않습니다.

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

AGP 빌드 캐시는 AGP 4.1에서 삭제되었습니다. 이전에 AGP에 도입됨 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를 사용하기 때문에 일부 아티팩트가 컴파일에서 삭제될 수 있습니다. classpath를 사용하여 클래스 경로를 지정해야 합니다. 컴파일 시간에 AGP 종속 항목을 사용하는 경우 이를 명시적 종속 항목으로 추가합니다.

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

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

알려진 문제

이 섹션에서는 Android Gradle 플러그인의 알려진 문제를 설명합니다. 7.0.0

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

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

자세한 내용은 KT-43944

린트 출력 누락

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

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

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