Android Gradle 플러그인 8.2.0 (2023년 11월)

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

호환성

Android Gradle 플러그인 8.2에서 지원하는 최대 API 수준은 API 수준 34입니다. 다음은 다른 호환성 정보입니다.

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

JDK 경로를 지정하는 새 매크로

#GRADLE_LOCAL_JAVA_HOME은 JDK 경로를 지정하는 데 사용할 수 있는 새로운 매크로입니다. 이를 통해 프로젝트의 Gradle 데몬(백그라운드 프로세스) 실행에 사용되는 Java 홈 경로를 더 안전하고 쉽게 지정할 수 있습니다. 경로 선택 사항은 .gradle/config.properties 파일의 java.home 필드에 저장됩니다. 이 필드는 Android 스튜디오의 Gradle JDK 설정 (File 또는 macOS의 경우 Android 스튜디오) > Settings > Build, Execution, Deployment > Build Tools > Gradle을 통해 설정합니다.

새 프로젝트는 기본적으로 #GRADLE_LOCAL_JAVA_HOME을 사용합니다. #JAVA_HOME과 같은 매크로를 이미 사용하고 있지 않은 한, 기존 프로젝트는 성공적인 동기화 후에 자동으로 새 매크로로 이전됩니다.

새 매크로의 주요 이점은 다음과 같습니다.

  • JDK 경로를 수동으로 수정하여 먼저 프로젝트를 열지 않고도 동기화를 트리거할 수 있습니다.
  • Gradle JDK 선택 사항에 대한 단일 정보 소스를 갖게 되므로 호환되지 않는 Gradle 및 프로젝트 JDK 버전과 관련된 오류가 줄어듭니다.

해결된 문제

Android Gradle 플러그인 8.2.0

해결된 문제
Android Gradle 플러그인
맞춤 소스 유형에서 여러 종류의 소스 세트를 만들어야 함
SDK 버전 확인에서 SDK 확장 프로그램의 사용자를 처리하지 않음
DependenciesInfoBuilder에 API 업데이트 및 문서가 필요함
Java 11 타겟인 DexingNoClasspathTransform(minSdk >= 24)이 중첩 멤버 누락으로 인해 실패함
DslExtension.Builder.extendProjectWith()가 Groovy에 설명된 대로 작동하지 않음
kotlin.Pair를 사용하지 않는 VariantSelector.withFlavor API 추가
`proguard.txt`가 변경되었기 때문에 AndroidLintAnalysisTask(:lintAnalyzeExternalRelease)에 캐시 부적중이 발생함
앱의 병합된 매니페스트에 종속 항목의 extractNativeLibs 속성 및 useEmbeddedDex 속성이 있음
빌드 도구 33.0.0에서 AIDL이 실패함
AGP: AIDL 도구 및 프레임워크 AIDL 파일의 경로를 공개 API로 노출함
요청: IDE에서 'PermittedSubclasses requires ASM9'의 수정사항을 제공해야 함
AGP를 컴파일할 때 바이트 코드 17 타겟팅
VariantManager.getModifiedName 삭제
AndroidTest.packaging.jniLibs.keepDebugSymbols가 androidTest 패키징에 영향을 주지 않음
GMD 계측 테스트 작업이 중단되고 재시도 시 실패함
agp 8.1.0의 generateLocaleConfig가 비확정적인 순서를 사용하여 재현 가능한 빌드를 손상시킴
ProcessApplicationManifest.navigationJsons에 절대 경로가 포함된 파일이 있음
AnalyticsService가 생성된 후 AnalyticsConfiguratorService를 통해 GradleBuildProject.Builder에 액세스할 수 없음
AndroidTest.packaging.jniLibs.keepDebugSymbols가 androidTest 패키징에 영향을 주지 않음
잘못된 색상 값의 컴파일이 허용됨
VariantBuilder의 잘못된 'ReplaceWith'
Gradle 8.1에서 .gradle/.android/analytics.settings로 인해 구성 캐싱이 중단됨
지원 중단 메시지에서 'ReplaceWith'가 사용되지 않음
기본 NDK 버전을 가져오는 방법 노출
Android Gradle 플러그인을 실행하려면 Java 17 필요
ASM 변환과 toAppend()가 호환되지 않음
KMP 프로젝트에서 Gradle을 통해 K2 UAST로 린트를 실행할 때 린트 오류가 수정됨
변형 수준 missingDimensionStrategy 지원(빌드 유형/버전 matchingFallback 지원 가능성)
Android 스튜디오 Giraffe에서 'android.injected.studio.version'이 삭제됨
AndroidXDependencyCheck를 사용 중지하는 기능이 추가됨
agp 8.1.0의 generateLocaleConfig가 비확정적인 순서를 사용하여 재현 가능한 빌드를 손상시킴
AAR 메타데이터의 R8/D8 버전 요구사항 알림(예: coreLibraryDesugaring 및 새로운 API의 아웃라인 사용 시)
동기화 경고: 'AnalyticsService가 생성된 후 AnalyticsConfiguratorService를 통해 GradleBuildProject.Builder에 액세스할 수 없음'
Gradle 8.2 마일스톤 또는 RC로 업데이트
'java.lang.Comparable'에 액세스할 수 없음
Android 라이브러리 모듈에서 androidResources를 사용할 수 없음
AGP를 8.0.2에서 8.1.0으로 업데이트한 후 ':app:mergeReleaseClasses' 작업 실행에 실패함
Gradle 8.1에서 .gradle/.android/analytics.settings로 인해 구성 캐싱이 중단됨
[AGP 8.1.0] splits.abi.isEnable과 testOptions.unitTests.isIncludeAndroidResources가 모두 true인 경우 ./gradlew 테스트가 실패하고 "Unable to find manifest output" 발생
Android 스튜디오 Giraffe가 AGP 8.1에서 versionCodeOverride를 준수하지 않음
계측 테스트를 실행한 후 AGP 8.1.0이 앱을 제거함 - 7.4.2는 제거하지 않음
APK를 변환하면 ListingFileRedirectTask 오류가 발생함
HEDGEHOG REGRESSION: 실행 버튼이 몇 초 지연됨(사양 생성 중)
Dexer(D8)
min-api 34 이상에서 덱싱할 때 네이티브 레코드 및 봉인 클래스 사용 설정
린트
인스턴스화된 린트 검사가 AppComponentFactory를 제대로 처리하지 않음
린트 8.2.0 알파 버전이 여전히 Kotlin에서 최상위 함수 가져오기를 지원하지 않음
린트 기준에 줄 및 열 번호를 포함하지 않는 옵션 추가
린트 기준에 줄 및 열 번호를 포함하지 않는 옵션 추가
린트 테스트는 Java 17 언어 기능을 지원하지 않음
Bumblebee 2021.1.1 패치 1에 commons-io의 이전 버전(20030203.000550)이 2.11.0보다 최신이라고 표시됨
린트 8.2.0 알파 버전이 여전히 Kotlin에서 최상위 함수 가져오기를 지원하지 않음
Bumblebee 2021.1.1 패치 1에 commons-io의 이전 버전(20030203.000550)이 2.11.0보다 최신이라고 표시됨
Android 스튜디오가 지정된 버전을 오래된 버전으로 잘못 표시함
K2 UAST를 사용할 때 린트에서 UseValueOf 문제가 무시됨
Android 린트에서 신고된 다른 프로젝트에서 예상치 못한 문제가 발생함
KMP 라이브러리에서 Android 린트가 실패하고 `property 'variantInputs.name' doesn't have a configured value`가 발생함
린트 통합
testImplementation 종속 항목으로 인한 DuplicatePlatformClasses 린트 오류
축소기(R8)
java.lang.VerifyError: 인증 도구에서 클래스를 거부함
Apache POI 라이브러리를 사용할 때 빌드가 :minifyReleaseWithR8에서 멈춤
Kotlin 1.9로 인해 null 검사가 제거되면 R8에 의해 Kotlin 람다가 소멸됨

Android Gradle 플러그인 8.2.1

해결된 문제
Android Gradle 플러그인
하위 프로젝트의 클래스가 아티팩트 변환을 통해 이미 덱싱되었으므로 하위 프로젝트의 클래스에서 덱싱 작업을 실행하지 않음
JavaVersion.VERSION_11 및 OpenJDK 21 ea 사용 시 Android Gradle 플러그인이 실패함
Dexer(D8)
Android U의 레코드 디슈가링
축소기(R8)
R8이 손상된 dex를 생성하여 런타임 시 클래스 변환 예외가 발생함
R8로 인해 인터페이스가 액세스할 수 없는 인터페이스로 변경됨
AGP 8.2.0에서 R8 Flurry SDK 비정상 종료
Android - R8로 인해 LinearLayoutManager의 서브클래스가 비정상 종료됨
리패키징이 사용 설정되어 있고 축소, 난독화, 최적화가 사용 중지된 경우 R8에서 ClassCastException이 발생함
BridgeAnalyzer.analyzeMethod에서 R8이 멈춤
R8 v8.2.33에서 'java.lang.VerifyError: 피연산자 스택의 잘못된 유형' 런타임이 업그레이드 후 비정상 종료됨

Android Gradle 플러그인 8.2.2

해결된 문제
Android Gradle 플러그인
AGP 8.2.0에서 JaCoCo 버전을 설정할 수 없음
Dexer(D8)
[디슈가링된 라이브러리] 디슈가링된 라이브러리 버전 2.1이 이전 버전의 R8과 호환되지 않음
D8에서만 최적화가 실행됨
축소기(R8)
[R8 8.3.21] R8 8.3.21이 R8 8.1.56보다 1.57MB 더 큼
class.getInterfaces()에서 빈 값 반환