Android Gradle 플러그인 8.3.0 (2024년 2월)

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

호환성

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

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

다음은 Android Gradle 플러그인 8.3의 새로운 기능입니다.

패치 출시

다음은 Android 스튜디오 Iguana 및 Android Gradle 플러그인 8.3의 패치 출시 목록입니다.

Android 스튜디오 Iguana | 2023.2.1 패치 2 및 AGP 8.3.2 (2024년 4월)

이번 소규모 업데이트는 이러한 버그 수정을 포함합니다.

Android 스튜디오 Iguana | 2023.2.1 패치 1 및 AGP 8.3.1 (2024년 3월)

이번 소규모 업데이트는 이러한 버그 수정을 포함합니다.

Gradle 버전 카탈로그 지원

Android 스튜디오는 하나의 중앙 위치에서 종속 항목을 관리하고 모듈 또는 프로젝트 간에 종속 항목을 공유할 수 있는 기능인 TOML 기반 Gradle 버전 카탈로그를 지원합니다. 이제 Android 스튜디오에서 편집기 추천 및 Project Structure 대화상자와의 통합을 통해 버전 카탈로그를 더 쉽게 구성할 수 있습니다. Gradle 버전 카탈로그를 설정 및 구성하는 방법 또는 빌드를 버전 카탈로그로 이전하는 방법을 알아보세요.

코드 완성 및 탐색

Android 스튜디오는 TOML 파일 형식의 버전 카탈로그를 수정하거나 버전 카탈로그에서 빌드 파일에 종속 항목을 추가할 때 코드 완성을 제공합니다. 코드 완성 기능을 사용하려면 Ctrl+Space(macOS의 경우 Command+Space)를 누릅니다. 또한 Ctrl+b(macOS의 경우 Command+b)를 눌러 앱의 build.gradle 파일에서 종속 항목 참조가 있는 위치에서 버전 카탈로그에 선언된 위치로 빠르게 이동할 수 있습니다.

종속 항목 추가 시 코드 완성

프로젝트 구조 대화상자 통합

프로젝트에서 TOML 파일 형식으로 정의된 버전 카탈로그를 사용하는 경우 Android 스튜디오의 Project Structure 대화상자 Variables 뷰 (File > Project Structure > Variables)를 통해 정의된 변수를 수정할 수 있습니다. 각 버전 카탈로그에는 해당 카탈로그의 변수가 나열된 드롭다운이 있습니다. 변수를 수정하려면 값을 클릭하고 덮어씁니다. 이러한 변경사항을 저장하면 TOML 파일이 그에 따라 업데이트됩니다.

프로젝트 구조 대화상자의 버전 카탈로그에 있는 변수

Project Structure 대화상자 Dependencies 뷰 (File > Project Structure > Dependencies)에서 종속 항목을 업데이트할 수도 있습니다. 프로젝트 구조 대화상자를 사용하여 버전을 업데이트하려면 수정하려는 모듈 및 종속 항목으로 이동한 다음 요청된 버전 필드를 업데이트합니다. 이러한 변경사항을 저장하면 TOML 파일이 적절하게 업데이트됩니다. 종속 항목 버전이 변수를 사용하여 정의된 경우 이러한 방식으로 버전을 직접 업데이트하면 변수가 하드코딩된 값으로 대체됩니다. 또한 Project Structure 대화상자를 사용하든 안 사용하든 빌드 파일에서 종속 항목을 삭제해도 버전 카탈로그에서 종속 항목이 삭제되지는 않습니다.

프로젝트 구조 대화상자의 버전 카탈로그에 있는 종속 항목

알려진 문제 및 제한사항

다음은 Android 스튜디오의 Gradle 버전 카탈로그 지원과 관련된 알려진 문제 또는 제한사항입니다.

  • Kotlin 스크립트 파일에서 플러그인 별칭 선언 오류 강조 표시: alias(libs.plugins.example) 형식의 플러그인 선언을 추가하면 편집기에서 libs 부분 아래에 빨간색 밑줄을 추가합니다. 이는 Gradle 버전 8.0 이하에서 알려진 문제이며 향후 Gradle 버전에서 해결될 예정입니다.

  • Android 스튜디오는 TOML 형식의 버전 카탈로그만 지원합니다. 현재 Android 스튜디오 코드 완성, 탐색, 프로젝트 구조 대화상자 지원은 TOML 파일 형식으로 정의된 버전 카탈로그에만 사용할 수 있습니다. 하지만 settings.gradle 파일에 버전 카탈로그를 직접 추가하고 프로젝트에서 종속 항목을 사용할 수 있습니다.

  • KTS 빌드 파일의 탐색이 지원되지 않음: Kotlin 스크립트를 사용하여 작성된 빌드 파일에서 Ctrl+클릭(macOS의 경우 Command+클릭)을 사용하여 버전 카탈로그의 종속 항목 정의로 이동하는 기능은 아직 지원되지 않습니다.

  • Firebase Assistant가 빌드 스크립트에 종속 항목을 직접 추가합니다. Firebase Assistant는 버전 카탈로그를 통해서가 아니라 빌드 스크립트에 직접 종속 항목을 추가합니다.

  • '사용 내역 찾기' 기능이 지원되지 않음: 빌드 파일이 KTS인지 Groovy인지와 관계없이 다른 빌드 파일에서 버전 카탈로그 변수의 사용 내역을 찾는 기능은 아직 지원되지 않습니다. 즉, 버전 카탈로그의 변수 정의에서 Control+클릭(macOS에서는 Command+클릭)을 사용해도 변수가 사용되는 빌드 파일로 이동하지 않습니다.

  • Android 스튜디오의 Project Structure(프로젝트 구조) 대화상자에는 루트 gradle 폴더에 있는 경우 여러 카탈로그 파일이 표시되지만 복합 빌드의 카탈로그는 표시되지 않습니다. 예를 들어 앱용 카탈로그 파일과 복합 빌드용 카탈로그 파일 등 두 개의 카탈로그 파일이 있는 경우 프로젝트 구조 대화상자에는 앱 카탈로그 파일만 표시됩니다. 복합 빌드를 사용할 수 있지만 TOML 파일을 직접 수정해야 합니다.

추가 SDK 통계: 정책 문제

Android 스튜디오에서는 Google Play SDK 색인에서 Play 정책을 위반한 공개 SDK의 린트 경고를 build.gradle.ktsbuild.gradle 파일과 Project Structure Dialog에 표시합니다. Play 정책을 위반하는 종속 항목은 업데이트해야 합니다. 이러한 위반으로 인해 향후 Google Play Console에 게시하지 못할 수 있기 때문입니다. 정책 위반 경고는 Android 스튜디오에서 표시하는 오래된 버전 경고를 보완합니다.

Android 스튜디오 compileSdk 버전 지원

프로젝트에서 현재 버전의 Android 스튜디오에서 지원되지 않는 compileSdk를 사용하는 경우 Android 스튜디오에 경고가 표시됩니다. 가능한 경우 프로젝트에서 사용하는 compileSdk를 지원하는 Android 스튜디오 버전으로 이동하는 것이 좋습니다. Android 스튜디오를 업그레이드할 때 AGP도 업그레이드해야 할 수 있습니다. 또한 프로젝트에서 사용하는 compileSdk이 현재 버전의 AGP에서 지원되지 않는 경우 AGP는 빌드 도구 창에 경고를 표시합니다.

린트 동작 변경사항

Android Gradle 플러그인 8.3.0-alpha02부터 모듈에서 린트를 실행할 때 모듈의 기본 구성요소와 테스트 구성요소에 대해 별도의 린트 분석 작업이 실행됩니다. 이번 변경사항은 성능을 개선하기 위한 것입니다. 이전 동작으로 되돌리려면 gradle.properties 파일에 android.experimental.lint.analysisPerComponent=false를 설정하세요.

정확한 리소스 축소가 기본적으로 사용 설정됨

resources.arsc 파일에서 사용되지 않는 항목을 삭제하고 사용되지 않는 리소스 파일을 제거하는 정밀 리소스 축소는 기본적으로 사용 설정되어 있습니다. 이 축소를 사용 설정하면 리소스 테이블이 축소되고 참조된 res 폴더 항목만 APK에 포함됩니다.

정확한 리소스 축소를 사용 중지하려면 프로젝트의 gradle.properties 파일에서 android.enableNewResourceShrinker.preciseShrinkingfalse로 설정합니다.

해결된 문제

Android Gradle 플러그인 8.3.0

해결된 문제
Android Gradle 플러그인
빌드 캐시가 PackageForUnitTest 작업에 중복됨
[AGP 8.1.0] splits.abi.isEnable과 testOptions.unitTests.isIncludeAndroidResources가 모두 true인 경우 ./gradlew 테스트가 실패하고 "Unable to find manifest output" 발생
중첩된 Gradle 합성 빌드가 포함된 AGP 모델 빌드가 실패함
리소스 축소기가 리소스 ID를 손상시켜 런타임 비정상 종료를 야기함
최소 Gradle 버전 확인이 두 번째 빌드부터 실행되지 않음
AGP를 8.0.2에서 8.1.0으로 업데이트한 후 ':app:mergeReleaseClasses' 작업 실행에 실패함
[Gradle 8.4][업그레이드] 업그레이드 후 Kotlin Gradle 플러그인에서 지원 중단된 기능을 사용하여 통합 테스트가 실패함
구성 단계에서 매니페스트 오버레이 파일의 존재를 확인하지 않음
MergeJavaResWorkAction 오류에 관한 Gradle 문서 링크 깨짐
Gradle 8.1에서 .gradle/.android/analytics.settings로 인해 구성 캐싱이 중단됨
AGP가 ProjectComponentIdentifier.build 없이 ProjectComponentIdentifier.projectPath를 사용해서는 안 됨
AGP 'Analytics other plugin to proto: ...'의 정보 수준 로깅을 줄이거나 삭제하세요.
[Gradle 8.4][업그레이드] ProcessJavaResTask에서 구성하는 동안 파일 작업이 구성 캐싱을 중단합니다.
기호 테이블을 가져오는 변형 API(R.txt)
린트 독립형 플러그인이 gradleApi() 종속 항목을 제대로 처리하지 않습니다.
AGP 클래스/속성의 kDocs가 제대로 작동하지 않습니다. `VariantOutput.enable`은 `VariantOutput.enable`으로 대체해야 함을 나타냅니다.
AGP 8.3.0-alpha02가 Windows 호스트에 출시 프로필을 설치할 수 없습니다.
`android.enableDexingArtifactTransform=true` 적용
[Gradle 8.4][업그레이드] 구성 단계의 파일 처리로 인해 업그레이드 후 통합 테스트 실패
AGP 8.3.0-alpha-02 - `오류: 캐시된 리소스 저장소 역직렬화에 실패`
[Gradle 8.4][업그레이드] TestLabBuildService 구성 단계의 파일 처리로 인해 업그레이드 후 통합 테스트 실패
계측 테스트를 실행한 후 AGP 8.1.0이 앱을 제거함 - 7.4.2는 제거하지 않음
APK를 변환하면 ListingFileRedirectTask 오류가 발생함
ASSETS 아티팩트를 변환하면 입력/출력 위치가 손상됨
android.experimental.r8.dex-startup-optimization=true가 기본값이 되도록 승격
새로운 Gradle 구성 정렬 API로 이전
Kotlin 컴파일러가 IDEA 21.3으로 업데이트하려고 할 때 리소스 컴파일이 실패함
아티팩트 API를 사용한 반응형 get()
'android.lint.printStackTrace' AGP 속성을 안정화 버전으로 전환
AGP 8.1.0: 동적 기능: exportReleaseConsumerProguardFiles 및 extractProguardFiles 간의 암시적 종속 항목으로 인해 컴파일 오류 발생
`variant.unitTest.jniLibs.addGeneratedSourceDirectory`가 아무것도 하지 않는 것 같음
Gradle 8.4 호환성을 위해 AGP에 사용되는 XML 파서 업데이트
AGP 8.0.1 출시 패키지 jacoco 계측이 적용되지 않음
HEDGEHOG REGRESSION: 실행 버튼이 몇 초 지연됨(사양 생성 중)
AGP 8.3.0-alpha11이 시작 시 android.content.res.Resources$NotFoundException과 함께 비정상 종료되는 출시 APK를 생성함
'android.lint.printStackTrace' AGP 속성을 안정화 버전으로 전환
기능 요청: com.android.build.api.extension.impl.CURRENT_AGP_VERSION을 공개 API로 승격
SDK Manager에서 stdout으로의 스팸 로그 정보 출력을 중단해야 함
리소스 전용 라이브러리 모듈에서 DexArchiveBuilderTaskDelegate가 실패함
모든 발생 횟수 중복 항목에 대한 AGP7.4 맞춤 플러그인 변형 toTransform: META-INF/MANIFEST.MF 예외
새로운 매니페스트 태그 지원
스튜디오 설정의 '분리된 프로젝트' 링크가 잘못된 위치로 이동함
Javadoc 및 SourceJar에서 생성된 소스를 포함하는 옵션을 제공하세요.
compileSdk와 minCompileSdkVersion의 종속 항목 간 불일치를 빠르게 수정해야 함
[Gradle] tools:overrideLibrary가 별표(*)를 지원해야 함
매니페스트 수정 시 UI가 정지됨
AGP 8.2.0에서 JaCoCo 버전을 설정할 수 없음
동적 기능을 사용하는 프로젝트에서 Android Gradle 플러그인 8.2.0 설치 작업이 실패함
동적 기능을 사용하는 프로젝트에서 Android Gradle 플러그인 8.2.0 설치 작업이 실패함
Dexer(D8)
[디슈가링된 라이브러리] 디슈가링된 라이브러리 버전 2.1이 이전 버전의 R8과 호환되지 않음
D8에서만 최적화가 실행됨
린트
[린트] TranslucentViewDetector가 filterIncident 함수에서 비정상 종료되고 린트에서 잘못된 결과가 발생함
TranslucentViewDetector가 'behind' 값을 허용해야 함
KMP 라이브러리에서 Android 린트가 실패하고 `property 'variantInputs.name' doesn't have a configured value`가 발생함
TranslucentViewDetector가 매니페스트에서 잘못된 행을 보고함
프로젝트 종속 항목 사용 시 lintDebug가 UseTomlInstead 경고를 잘못 보고함
Android 린트에서 신고된 다른 프로젝트에서 예상치 못한 문제가 발생함
결합 및 클릭 리스너 내에서 LINT 검사 사용되지 않는 리소스의 거짓양성이 감지됩니다.
맞춤 린트 검사 jar 파일을 로드할 수 없음: 노드를 TreeNode로 전송할 수 없습니다.
변수 선언에서 주석 처리된 클래스를 사용하기 위해 린트 visitAnnotationUsage가 호출되지 않습니다.
린트 31.0.2가 실패하며 java.util.NoSuchElementException: 배열이 비어 있음이라는 메시지가 표시됩니다.
API 26이 필요한 kotlin.text.MatchNamedGroupCollection#get(String)에 관한 린트 경고 없음
lint:TypographyQuotes 거짓음성: 이스케이프된 아포스트로피가 두 개 이상 무시됨
AGP 8.0.2 린트 InvalidId 감지기 거짓양성
린트 기준에 LintError 문제 추가됨
빠른 수정 린트가 작동하지 않고 IDE 오류가 발생함
부분 분석으로 인한 일관되지 않은 테스트 실패
잘못된 경고 강조 표시(거짓양성)
변수 선언에서 주석 처리된 클래스를 사용하기 위해 린트 visitAnnotationUsage가 호출되지 않음
사용되지 않는 리소스 프로세서가 Gradle 빌드 파일을 삭제할 수 있음
NewApi 린트 검사가 'isAtleastU() && otherCondition()' 최종 필드를 이해하지 못함
`LintClient.getSdkHome`의 StackOverflow
'플랫폼' 종속 항목이 오래된 경우 Android 스튜디오/린트가 알려주지 않음
버그: Firebase-bom 종속 항목 업데이트 제안이 없음
Project Structure(및 Gradle(?))가 최신 버전으로 업그레이드할 Firebase BOM 종속 항목을 발견하지 못함
린트 통합
testImplementation 종속 항목으로 인한 DuplicatePlatformClasses 린트 오류
축소기(R8)
AGP 8.0.2에서 8.1.0으로 업그레이드한 후 R8이 작동하지 않음
isShrinkResources가 8.3.0-alpha11에서 alpha14로 과도하게 최적화됨
AGP 8.2.0에서 R8 Flurry SDK 비정상 종료
Android - R8로 인해 LinearLayoutManager의 서브클래스가 비정상 종료됨
R8 v8.2.33에서 'java.lang.VerifyError: 피연산자 스택의 잘못된 유형' 런타임이 업그레이드 후 비정상 종료됨
[R8 8.3.21] R8 8.3.21이 R8 8.1.56보다 1.57MB 더 큼
[R8 8.3.21] R8 8.3.21이 R8 8.1.56보다 1.57MB 더 큼
class.getInterfaces()에서 빈 값 반환
kotlin_dev 봇에서 SimpleKotlinEnumUnboxingTest 테스트가 실패함

Android Gradle 플러그인 8.3.1

해결된 문제
Android Gradle 플러그인
MergeJavaResourcesTask 증분 입력 처리 문제
린트 통합
린트가 AGP 8.3.0-rc02에서 상위 소스 세트의 유형을 확인할 수 없음

Android Gradle 플러그인 8.3.2

해결된 문제
Android Gradle 플러그인
디슈가링이 사용 설정된 AGP 8.3에서 교착 상태가 발생할 수 있음
AGP 8.3으로 인해 zipApksFor 작업이 중단됨
린트 통합
린트가 KMP 종속 항목을 구분할 수 없음