Android Gradle 플러그인 미리보기 출시 노트

이 페이지에는 Android Gradle 플러그인 (AGP)의 미리보기 버전 출시 노트가 포함되어 있습니다.

Android Gradle 플러그인 9.0

Android Gradle 플러그인 9.0은 AGP의 새로운 주요 버전으로, API 및 동작 변경사항이 적용됩니다.

Android Gradle 플러그인 9.0.0-alpha04로 업데이트하려면 Android 스튜디오 Narwhal 4 Feature Drop | 2025.1.4에서 Android Gradle 플러그인 업그레이드 어시스턴트를 사용하세요.

AGP 업그레이드 어시스턴트는 적절한 경우 프로젝트를 업그레이드할 때 기존 동작을 유지하여 AGP 9.0의 새로운 기본값을 모두 채택할 준비가 되지 않았더라도 AGP 9.0을 사용하도록 프로젝트를 업그레이드할 수 있도록 지원합니다.

호환성

Android Gradle 플러그인 9.0.0-alpha04에서 지원하는 최대 Android API 수준은 API 수준 36입니다.

Android Gradle 플러그인 9.0.0-alpha04에는 Gradle 9.0.0이 필요합니다.

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

내부 DSL 구현 및 지원 중단된 변형 API에 이제 명시적 선택 필요

이제 Android Gradle 플러그인에 정의된 API 노출 영역이 있으며 지원되는 API는 com.android.tools.build:gradle-api Maven 아티팩트에 정의되어 있습니다.

기존 바이너리 플러그인 및 빌드 스크립트와의 호환성을 위해 정의된 API 노출 영역보다 오래된 이전 DSL 구현은 AGP 8.13 이하에서 기본적으로 계속 노출되었습니다. 이를 통해 Gradle 플러그인 및 빌드 스크립트의 코드가 DSL의 내부 구현 세부정보와 지원 중단된 android.applicationVariants, android.libraryVariants, android.testVariants, android.unitTestVariants API에 모두 액세스할 수 있습니다. 이러한 API는 AGP 10에서 2026년에 삭제될 예정입니다.

이 전환을 더 명확하게 하기 위해 기존 변형 API와 내부 DSL은 기본적으로 Android Gradle 플러그인 9.0.0-alpha04에서 액세스할 수 없습니다.

gradle.properties에서 android.newDsl=false를 설정하여 지원 중단된 API를 다시 사용할 수 있습니다.

9.0 알파 시리즈에서 Google은 플러그인 작성자에게 연락하여 새로운 모드와 완전히 호환되는 플러그인을 적용하고 출시하도록 지원하고 있으며, Android 스튜디오의 AGP 업그레이드 어시스턴트를 개선하여 이전 과정을 안내할 예정입니다.

Kotlin 내장

Android Gradle 플러그인 9에는 Kotlin 컴파일을 위한 지원이 내장되어 별도로 적용된 Kotlin 플러그인을 대체합니다. 이렇게 하면 AGP와의 통합이 간소화되고 지원 중단된 API를 사용하지 않으며 경우에 따라 성능이 향상됩니다.

Android Gradle 플러그인 9에는 Kotlin Gradle 플러그인 2.2.0에 대한 런타임 종속 항목이 있습니다. 이는 내장 Kotlin 지원에 필요한 최소 버전입니다.

android.builtInKotlin=false를 설정하여 내장 Kotlin을 선택 해제할 수 있습니다. 선택 해제했으며 이전 버전의 Kotlin Gradle 플러그인을 사용해야 하는 경우 강제로 다운그레이드할 수 있습니다.

buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("2.0.0") } // or another version that you want to use
        }
    }
}

동작 변경사항

Android Gradle 플러그인 9.0에는 다음과 같은 새로운 동작이 있습니다.

동작 권장사항
Android Gradle 플러그인 9.0은 기본적으로 NDK 버전 r28c을 사용합니다. 사용할 NDK 버전을 명시적으로 지정하는 것이 좋습니다.
Android Gradle 플러그인 9.0에서는 기본적으로 라이브러리 소비자가 동일하거나 더 높은 컴파일 SDK 버전을 사용해야 합니다. 라이브러리를 사용할 때는 동일하거나 더 높은 컴파일 SDK를 사용하세요. 이렇게 할 수 없거나 게시하는 라이브러리의 소비자가 전환할 시간을 더 주려면 AarMetadata.minCompileSdk을 명시적으로 설정하세요.

AGP 9.0에는 다음 Gradle 속성의 기본값에 대한 업데이트가 포함되어 있습니다. 이렇게 하면 업그레이드 시 AGP 8.13 동작을 유지할 수 있습니다.

속성 함수 AGP 8.13에서 AGP 9.0으로 변경 권장사항
android.newDsl android 블록의 기존 구현을 노출하지 않고 새 DSL 인터페이스를 사용합니다.
또한 android.applicationVariants과 같은 기존 변형 API에 더 이상 액세스할 수 없습니다.
falsetrue android.newDsl=false를 설정하여 선택 해제할 수 있습니다.
프로젝트에서 사용하는 모든 플러그인과 빌드 로직이 호환되면 선택 해제를 삭제합니다.
android.builtInKotlin org.jetbrains.kotlin.android 플러그인 없이 Android Gradle 플러그인에서 직접 Kotlin 코드를 컴파일할 수 있도록 지원을 사용 설정했습니다. falsetrue 가능한 경우 org.jetbrains.kotlin.android 플러그인 사용을 삭제하여 기본 Kotlin을 채택합니다. 그렇지 않은 경우 android.builtInKotlin=false을 설정하여 선택 해제합니다.
android.uniquePackageNames 각 라이브러리에 고유한 패키지 이름이 있어야 합니다. falsetrue 프로젝트 내 모든 라이브러리에 고유한 패키지 이름을 지정합니다. 그렇게 할 수 없는 경우 이전하는 동안 이 플래그를 사용 중지하면 됩니다.
android.dependency.useConstraints 구성 간 종속 항목 제약 조건의 사용을 제어합니다.
AGP 9.0의 기본값은 애플리케이션 기기 테스트 (AndroidTest)에서만 제약 조건을 사용하는 false입니다. true로 설정하면 8.13 동작으로 되돌아갑니다.
truefalse 필요하지 않은 경우 종속 항목 제약 조건을 어디에나 사용하지 마세요. 이 플래그의 새로운 기본값을 수락하면 프로젝트 가져오기 프로세스에서 최적화가 사용 설정되어 Android 라이브러리 하위 프로젝트가 많은 빌드의 가져오기 시간이 줄어듭니다.
aandroid.enableAppCompileTimeRClass 최종이 아닌 R 클래스에 대해 애플리케이션에서 코드를 컴파일하여 애플리케이션 컴파일을 라이브러리 컴파일과 일치시킵니다.
이렇게 하면 증분성이 개선되고 향후 리소스 처리 흐름의 성능 최적화가 가능해집니다.
falsetrue 많은 프로젝트에서 소스 변경 없이 새로운 동작을 채택할 수 있습니다. R 클래스 필드가 switch 사례와 같이 상수가 필요한 곳에 사용되는 경우 연결된 if 문을 사용하도록 리팩터링합니다.
android.sdk.defaultTargetSdkToCompileSdkIfUnset 컴파일 SDK 버전을 앱 및 테스트의 타겟 SDK 버전의 기본값으로 사용합니다.
이 변경사항 전에는 타겟 SDK 버전이 기본적으로 최소 SDK 버전으로 설정되었습니다.
falsetrue 앱과 테스트의 타겟 SDK 버전을 명시적으로 지정합니다.
android.onlyEnableUnitTestForTheTestedBuildType 테스트된 빌드 유형의 단위 테스트 구성요소만 만듭니다.
기본 프로젝트에서 이전 동작은 디버그 또는 출시를 위해 단위 테스트를 실행하는 것이었지만 이제 디버그를 위한 단일 단위 테스트가 실행됩니다.
falsetrue 디버그와 출시 모두에서 테스트를 실행할 필요가 없는 프로젝트의 경우 변경할 필요가 없습니다.
android.proguard.failOnMissingFiles AGP DSL에 지정된 보관 파일이 디스크에 없으면 오류와 함께 빌드가 실패합니다. 이 변경사항이 적용되기 전에는 파일 이름의 오타로 인해 파일이 자동으로 무시되었습니다. falsetrue 잘못된 ProGuard 파일 선언 삭제
android.r8.optimizedResourceShrinking R8이 클래스와 Android 리소스를 함께 고려하여 더 적은 Android 리소스를 유지하도록 허용합니다. falsetrue 프로젝트의 보관 규칙이 이미 완료된 경우 변경할 필요가 없습니다.
android.r8.strictFullModeForKeepRules 클래스가 유지될 때 기본 생성자를 암시적으로 유지하지 않아 R8이 더 적게 유지할 수 있습니다. 즉, -keep class A는 더 이상 -keep class A { <init>(); }
를 의미하지 않습니다.
falsetrue 프로젝트의 보관 규칙이 이미 완료된 경우 변경할 필요가 없습니다.

기본 생성자를 유지해야 하는 모든 경우에 프로젝트의 유지 규칙에서 -keep class A-keep class A { <init>(); }로 바꿉니다.
android.defaults.buildfeatures.shaders 모든 하위 프로젝트에서 셰이더 컴파일을 사용 설정합니다. truefalse 컴파일할 셰이더가 포함된 하위 프로젝트에서만 셰이더 컴파일을 사용 설정하려면 해당 프로젝트의 Gradle 빌드 파일에서 다음을 설정하세요.
android {
  buildFeatures {
    shaders = true
  }
}

삭제된 기능

Android Gradle 플러그인 9.0에서는 다음 기능을 삭제합니다.

DSL 변경

Android Gradle 플러그인 9.0에는 다음과 같은 주요 DSL 변경사항이 있습니다.

  • CommonExtension의 매개변수화가 삭제되었습니다.

    이는 향후 소스 수준의 호환성 문제 방지를 위한 소스 수준의 호환성 문제일 뿐이지만 블록 메서드를 CommonExtension에서 ApplicationExtension, LibraryExension, DynamicFeatureExtension, TestExtension로 이동해야 한다는 의미이기도 합니다.

    프로젝트를 AGP 9.0으로 업그레이드할 때 이러한 매개변수나 차단 메서드를 사용하는 Gradle 플러그인 코드를 리팩터링하세요. 예를 들어 다음 플러그인은 유형 매개변수를 삭제하고 삭제된 블록 메서드를 사용하지 않도록 업데이트됩니다.

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    일정 범위의 AGP 버전을 타겟팅하는 플러그인의 경우 게터를 직접 사용하면 AGP 버전 9.0 미만과 바이너리 호환됩니다.

DSL 삭제됨

Android Gradle 플러그인 9.0에서 다음이 삭제됩니다.

Gradle 속성 삭제

다음 Gradle 속성은 기본적으로 사용 설정된 기능을 전역적으로 사용 중지하는 방법으로 처음 추가되었습니다.

이러한 기능은 AGP 8.0 이하에서 기본적으로 사용 중지되었습니다. 더 효율적인 빌드를 위해 이러한 기능을 사용하는 하위 프로젝트에서만 사용 설정하세요.

속성 함수 교체
android.defaults.buildfeatures.aidl 모든 하위 프로젝트에서 AIDL 컴파일을 사용 설정합니다. 다음 속성을 해당 프로젝트의 Gradle 빌드 파일에 설정하여 AIDL 소스가 있는 하위 프로젝트에서만 AIDL 컴파일을 사용 설정합니다.
android {
  buildFeatures {
    aidl = true
  }
}
AIDL 소스가 포함된 각 하위 프로젝트의 Gradle 빌드 파일
android.defaults.buildfeatures.renderscript 모든 하위 프로젝트에서 RenderScript 컴파일 을 사용 설정합니다. 다음 속성을 해당 프로젝트의 Gradle 빌드 파일에 설정하여 renderscript 소스가 있는 하위 프로젝트에서만 renderscript 컴파일을 사용 설정합니다.
android {
  buildFeatures {
    renderScript = true
  }
}

삭제된 API

Android Gradle 플러그인 9.0에서 다음이 삭제됩니다.

  • 지원 중단되고 사용 중지된 BaseExtension.registerTransform API. AGP 4.2 이하에서 실행을 타겟팅하는 동안 최신 AGP 버전을 기준으로 컴파일할 수 있도록만 유지되었습니다.

강제 적용된 Gradle 속성

다음 Gradle 속성을 설정하면 AGP 9.0에서 오류가 발생합니다.

Android Gradle 플러그인 업그레이드 어시스턴트는 이러한 속성을 사용하는 프로젝트를 AGP 9.0으로 업그레이드하지 않습니다.

속성 함수
android.r8.integratedResourceShrinking 이제 리소스 축소는 항상 R8의 일부로 실행되며 이전 구현은 삭제되었습니다.