Android Gradle 플러그인 8.0.0 (2023년 4월)

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

호환성

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

패치 출시

다음은 Android Gradle 플러그인 8.0의 패치 출시 목록입니다.

Android Gradle 플러그인 8.0.2 (2023년 5월)

AGP 8.0.2에서 수정된 버그 목록은 Android 스튜디오 2022.2.1 해결된 문제를 참고하세요.

Android Gradle 플러그인 8.0.1 (2023년 5월)

이번 소규모 업데이트는 다음과 같은 버그 수정을 포함합니다.

해결된 문제
오류: AGP 7.2.2에서 7.4.0으로 업그레이드한 후 'No VersionRequirement with the given id in the table' 오류 발생
markTypeAsLive AGP 7.4.1에서 R8 NullPointerException 발생
[R8 4.0.53] Android 11에서 하드 클래스 인증 실패

브레이킹 체인지: 모듈 수준 빌드 스크립트에 필요한 네임스페이스

네임스페이스는 매니페스트 파일이 아닌 모듈 수준 build.gradle.kts 파일에 설정해야 합니다. AGP 7.3부터 namespace DSL 속성을 사용할 수 있습니다. 자세한 내용은 네임스페이스 설정을 참고하세요.

네임스페이스 DSL로 마이그레이션할 때는 다음 문제에 유의하세요.

  • 이전 버전의 AGP는 기본 네임스페이스 또는 애플리케이션 ID에서 테스트 네임스페이스를 잘못 추론하는 경우가 있습니다. AGP 업그레이드 어시스턴트는 프로젝트의 기본 네임스페이스와 테스트 네임스페이스가 동일함을 발견하면 업그레이드를 차단합니다. 업그레이드가 차단되면 testNamespace를 수동으로 변경하고 그에 따라 소스 코드를 수정해야 합니다.
  • 테스트 네임스페이스를 변경한 후 코드가 컴파일되지만 계측 테스트가 런타임에 실패할 수 있습니다. 계측 테스트 소스 코드가 androidTest 및 앱 소스 모두에 정의된 리소스를 참조하는 경우 이러한 상황이 발생할 수 있습니다.

자세한 내용은 문제 #191813691 댓글 #19를 참조하세요.

브레이킹 체인지: 빌드 옵션 기본값

AGP 8.0부터 빌드 성능을 개선하기 위해 이러한 플래그의 기본값이 변경되었습니다. 이러한 변경사항 중 일부를 지원하도록 코드를 조정하려면 AGP 업그레이드 어시스턴트(Tools > AGP Upgrade Assistant)를 사용하세요. 업그레이드 어시스턴트에서는 새 동작을 수용하도록 코드를 업데이트하거나 이전 동작을 보존하도록 플래그를 설정하는 과정을 안내합니다.

플래그 새 기본값 이전 기본값 Notes
android.defaults.buildfeatures.buildconfig false true AGP 8.0은 기본적으로 BuildConfig를 생성하지 않습니다. 이 옵션이 필요한 프로젝트에서 DSL을 사용하여 이 옵션을 지정해야 합니다.
android.defaults.buildfeatures.aidl false true AGP 8.0은 기본적으로 AIDL 지원을 사용 설정하지 않습니다. 이 옵션이 필요한 프로젝트에서 DSL을 사용하여 이 옵션을 지정해야 합니다. 이 플래그는 AGP 9.0에서 삭제될 예정입니다.
android.defaults.buildfeatures.renderscript false true AGP 8.0은 기본적으로 RenderScript 지원을 사용 설정하지 않습니다. 이 옵션이 필요한 프로젝트에서 DSL을 사용하여 이 옵션을 지정해야 합니다. 이 플래그는 AGP 9.0에서 삭제될 예정입니다.
android.nonFinalResIds true false AGP 8.0은 기본적으로 최종이 아닌 필드가 있는 R 클래스를 생성합니다.
android.nonTransitiveRClass true false AGP 8.0은 현재 모듈에만 정의된 리소스의 R 클래스를 생성합니다.
android.enableR8.fullMode true false AGP 8.0은 기본적으로 R8 전체 모드를 사용 설정합니다. 자세한 내용은 R8 전체 모드를 참고하세요.

브레이킹 체인지: 적용된 빌드 옵션 값

AGP 8.0부터는 더 이상 이러한 플래그 값을 변경할 수 없습니다. gradle.properties 파일에 지정하면 값이 무시되고 AGP가 경고를 출력합니다.

플래그 적용된 값 Notes
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0은 구성 단계에서 구성 해상도를 감지하면 Gradle 구성 시간에 부정적인 영향을 미치므로 경고를 표시합니다.
android.r8.failOnMissingClasses true 더 나은 DEX 최적화를 보장하기 위해 누락된 클래스가 있는 경우 AGP 8.0이 R8을 사용하는 빌드에 실패합니다. 이 문제를 해결하려면 누락된 라이브러리 또는 -dontwarn keep 규칙을 추가해야 합니다. 자세한 내용은 R8 축소기의 클래스 경고 누락을 참고하세요.
android.testConfig.useRelativePath true 단위 테스트에서 Android 리소스, 애셋, 매니페스트의 사용을 지원하는 경우 AGP 8.0은 상대 경로만 포함하는 test_config.properties 파일을 생성합니다. 이렇게 하면 Android 단위 테스트에서 항상 Gradle 빌드 캐시를 사용할 수 있습니다.
android.useNewJarCreator true AGP는 JAR 파일을 만들 때 Zipflinger 라이브러리를 사용하여 빌드 성능을 개선합니다.
android.bundletool.includeRepositoriesInDependencyReport true AAB 및 APK에 SDK 종속 항목 정보 추가가 사용 설정되면 AGP 8.0은 이 정보에 프로젝트 저장소 목록을 추가합니다. 자세한 내용은 Play Console의 종속 항목 정보를 참고하세요.
android.enableArtProfiles true 이제 기준 프로필이 항상 생성됩니다. 자세한 내용은 기준 프로필을 참고하세요.
android.enableNewResourceShrinker true 기본적으로 새로운 리소스 축소기 구현을 사용합니다. 새로운 리소스 축소기에는 동적 기능 지원이 포함됩니다.
android.enableSourceSetPathsMap true 상대 리소스 경로 매핑을 계산하는 데 사용되므로 Gradle 빌드가 더 자주 업데이트됩니다.
android.cacheCompileLibResources true Gradle이 프로젝트 위치를 기준으로 리소스 파일을 추적하므로 이제 컴파일된 라이브러리 리소스를 기본적으로 캐시할 수 있습니다. android.enableSourceSetPathsMap를 사용 설정해야 합니다.
android.disableAutomaticComponentCreation true AGP 8.0은 기본적으로 SoftwareComponent를 만들지 않습니다. 대신 AGP는 게시 DSL을 사용하여 게시되도록 구성된 변형의 경우에만 SoftwareComponents를 만듭니다.

실행 프로필의 새로운 안정적인 플래그

AGP에는 새로운 플래그 android.settings.executionProfile가 포함됩니다. 이 플래그를 사용하여 SettingsExtension에서 기본 실행 프로필을 재정의합니다. 자세한 내용은 설정 플러그인 문서를 참고하세요.

실험용 플래그를 미리 보려면 미리보기 출시 노트를 참고하세요.

Kotlin 지연 속성 할당이 지원되지 않음

빌드 스크립트에 Gradle의 Kotlin DSL을 사용하는 경우 Android 스튜디오 및 AGP 8.0은 = 연산자를 사용한 실험용 속성 할당을 지원하지 않습니다. 이 기능에 관한 자세한 내용은 출시 노트문서를 참고하세요.

빌드 분석 도구 작업 카테고리

Android 스튜디오 Flamingo부터 빌드 분석 도구에 빌드 기간에 영향을 미치는 작업을 위한 새로운 기본 뷰가 있습니다. 프로젝트에서 AGP 8.0 이상을 사용하는 경우 빌드 분석 도구는 작업을 개별적으로 표시하는 대신 카테고리별로 그룹화합니다. 예를 들어 Android 리소스, Kotlin 또는 Dexing과 관련된 작업은 함께 그룹화된 다음 빌드 기간에 따라 정렬됩니다. 이렇게 하면 빌드 시간에 가장 큰 영향을 미치는 카테고리를 쉽게 알 수 있습니다. 각 카테고리를 펼치면 상응하는 작업 목록이 표시됩니다. 작업을 그룹화하지 않고 개별적으로 표시하려면 그룹화 기준 드롭다운을 사용하세요.

빌드 분석 도구 작업 카테고리

새 설정 플러그인

AGP 8.0.0-alpha09에 새로운 설정 플러그인이 도입되었습니다. 설정 플러그인을 사용하면 전역 구성(모든 모듈에 적용되는 구성)을 한곳에서 중앙화할 수 있으므로 구성을 복사하여 여러 모듈에 붙여넣을 필요가 없습니다. 또한 설정 플러그인을 사용하여 도구 실행 프로필을 만들거나 도구를 실행하는 방법에 관한 다양한 안내를 만들고 이들 간에 전환할 수 있습니다.

설정 플러그인을 사용하려면 settings.gradle 파일에 플러그인을 적용하세요.

apply plugin 'com.android.settings'

글로벌 구성 중앙 집중화

전역 구성을 구성하려면 settings.gradle 파일에서 새 android 블록을 사용합니다. 예를 들면 다음과 같습니다.

android {
  compileSdk 31
  minSdk 28
  ...
}

도구 실행 프로필

설정 플러그인을 사용하면 일부 도구의 실행 프로필을 만들 수도 있습니다. 실행 프로필은 도구 실행 방법을 결정합니다. 환경에 따라 서로 다른 실행 프로필을 선택할 수 있습니다. 실행 프로필에서 도구의 JVM 인수를 설정하고 별도의 프로세스에서 실행되도록 구성할 수 있습니다. 현재는 R8 도구만 지원됩니다.

다음 예와 같이 실행 프로필을 만들고 settings.gradle 파일에 기본 실행 프로필을 설정합니다.

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

기본 프로필을 재정의하려면 gradle.properties 파일의 android.experimental.settings.executionProfile 속성을 사용하여 다른 프로필을 선택합니다.

android.experimental.settings.executionProfile=high

명령줄을 사용하여 이 속성을 설정할 수도 있으므로 다양한 워크플로를 설정할 수 있습니다. 예를 들어 지속적 통합 워크플로가 있는 경우 settings.gradle 파일을 변경하지 않고도 명령줄을 사용하여 실행 프로필을 변경할 수 있습니다.

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

AGP 8.0을 실행하려면 JDK 17이 필요함

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

Android 스튜디오 내 AGP에 사용되는 JDK 버전을 수동으로 설정해야 하는 경우 JDK 17 이상을 사용해야 합니다.

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