Android Gradle 플러그인 7.1.0(2022년 1월)
Android Gradle 플러그인 7.1.0은 다양한 새 기능과 개선사항이 포함된 주요 버전입니다.
7.1.3(2022년 4월)
이번 소규모 업데이트는 다음과 같은 버그 수정을 포함합니다.
- R8에서 보고된 중복 클래스 문제
이 버전에 포함된 버그 수정의 전체 목록을 보려면 Android 스튜디오 Bumblebee 패치 3 블로그 게시물을 참고하세요.
7.1.2(2022년 2월)
이번 소규모 업데이트는 다음과 같은 버그 수정을 포함합니다.
- Android Gradle 플러그인 7.1.0-rc01이 단위 테스트 중 ASM 바이트 코드를 변환하지 못함
- Gradle 동기화가 ''com.android.build.api.extension.AndroidComponentsExtension' 클래스를 로드할 수 없음' 메시지와 함께 실패함
- 일부 새로운 DSL 블록을 Android Gradle 플러그인 7.0.0의 Groovy DSL에서 사용할 수 없음
- AGP 7.1 새 Publishing API: 생성된 javadoc jar에 서명할 수 없음
- ClassesDataSourceCache는 최신 Asm 버전을 사용해야 함
- Android 스튜디오 BumbleBee가 항상 최신 변경사항을 배포하지는 않음
이 버전에 포함된 버그 수정의 전체 목록을 보려면 Android 스튜디오 Bumblebee 패치 2 블로그 게시물을 참고하세요.
7.1.1(2022년 2월)
이 소규모 업데이트는 Android 스튜디오 Bumblebee 패치 1의 출시에 해당합니다.
이 버전에 포함된 버그 수정 목록을 보려면 Android 스튜디오 Bumblebee 패치 1 블로그 게시물을 참고하세요.
호환성
최소 버전 | 기본 버전 | 참고 | |
---|---|---|---|
Gradle | 7.2 | 7.2 | 자세한 내용은 Gradle 업데이트하기를 참고하세요. |
SDK 빌드 도구 | 30.0.3 | 30.0.3 | SDK 빌드 도구를 설치 또는 구성합니다. |
NDK | 해당 사항 없음 | 21.4.7075529 | 다른 버전의 NDK를 설치 또는 구성합니다. |
JDK | 11 | 11 | 자세한 내용은 JDK 버전 설정을 참고하세요. |
린트 분석 작업 캐시 가능
이제 AndroidLintAnalysisTask
가 Gradle 빌드 캐시와 호환됩니다. gradle.properties
파일에서 org.gradle.caching=true
를 설정하여 빌드 캐시를 사용 설정하면 가능한 경우 린트 분석 작업이 빌드 캐시의 출력을 가져옵니다.
린트 분석 작업은 Android Gradle 플러그인을 사용해 린트를 실행할 때 병목 현상을 일으키는 가장 큰 요소인 경우가 많으므로 빌드 캐시를 사용 설정하면 다양한 상황에서 린트 실행 시 빌드 속도가 개선됩니다. 예를 들어 다중 모듈 프로젝트가 있고 CI 서버에서 린트를 실행하기 전에 빌드 디렉터리를 정리하는 경우 성능이 눈에 띄게 향상됩니다.
C/C++ 모듈이 동일한 프로젝트의 다른 C/C++ 모듈을 참조할 수 있음
이제 C/C++ 코드가 포함된 Gradle Android 모듈이 다른 Gradle 모듈의 헤더 파일과 라이브러리 코드를 참조하도록 설정할 수도 있습니다. Gradle 모듈 간에 헤더와 라이브러리를 통신하는 데 Prefab 프로토콜을 사용합니다.
요구사항
-
소비 모듈은
ndk-build
가 아니라CMake
여야 합니다. ndk-build가 지원되려면 향후 NDK를 업데이트해야 합니다. 게시 모듈은CMake
또는ndk-build
일 수 있습니다. -
소비 모듈은
build.gradle
파일에서prefab
을 사용 설정해야 합니다.
android {
buildFeatures {
prefab true
}
}
- 게시 모듈은
build.gradle
파일에서prefabPublishing
을 사용 설정해야 합니다.
android {
buildFeatures {
prefabPublishing true
}
}
- 소비 모듈은
build.gradle
파일의dependencies
블록에 줄을 추가하여 게시 모듈을 참조해야 합니다. 예를 들면 다음과 같습니다.
dependencies {
implementation project(':mylibrary')
}
- 게시 모듈은
prefab
섹션을 사용하여 패키지를 노출해야 합니다. 예를 들면 다음과 같습니다.
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}
- 소비 모듈의
CMakeLists.txt
파일은find_package()
를 사용하여 생성 모듈이 게시한 패키지를 찾을 수 있습니다. 예를 들면 다음과 같습니다.
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)
- 전체 애플리케이션의 STL 하나가 있어야 합니다. 예를 들어 소비 모듈과 게시 모듈에서 모두 C++ 공유 STL을 사용할 수 있습니다.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}
AGP를 사용하여 네이티브 AAR 소비자 및 생성자를 구성하는 방법에 관한 추가 설명은 AGP의 네이티브 종속 항목을 참고하세요.
settings.gradle
파일의 저장소 설정
Android 스튜디오 Bumblebee에서 새 프로젝트가 생성되면 최상위 build.gradle
파일에 plugins
블록이 포함되며 그 뒤에 빌드 디렉터리를 정리하는 코드가 나옵니다.
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
이전에 최상위 build.gradle
파일에 있던 저장소 설정이 이제 settings.gradle
파일에 있습니다.
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'
모듈 수준 build.gradle
파일은 변경되지 않았습니다. 따라서 최상위 build.gradle
파일과 settings.gradle
파일을 사용하여 프로젝트의 모든 모듈에 적용되는 빌드 구성 또는 Gradle 자체에 적용되는 저장소와 종속 항목을 정의하고 모듈 수준 build.gradle
파일을 사용하여 프로젝트 내 특정 모듈에만 적용되는 빌드 구성을 정의합니다.
리소스 축소기 개선
Android 스튜디오 Bumblebee에서는 리소스 축소기가 개선되어 앱 크기를 줄이는 데 도움이 됩니다.
동적 기능이 있는 앱 지원
Android 리소스 축소기의 기본 구현이 Android Gradle 플러그인 7.1.0-alpha09에서 업데이트되었습니다. 새로운 이 구현은 동적 기능을 통해 앱 축소를 지원합니다.
앱 크기의 실험적 추가 축소
새로운 리소스 축소기 구현은 사용하지 않는 값 리소스 및 사용하지 않는 파일 리소스의 참조를 삭제하도록 리소스 테이블을 수정하여 이미 축소된 앱의 크기를 훨씬 더 줄일 수 있습니다. 새 리소스 축소기는 사용하지 않는 파일 리소스를 완전히 삭제하여 앱 크기를 더 줄일 수 있습니다. 이 동작은 아직 기본적으로 사용 설정되지 않지만 프로젝트의 gradle.properties
파일에 실험용 옵션 android.experimental.enableNewResourceShrinker.preciseShrinking=true
를 추가하여 사용해 볼 수 있습니다.
새 리소스 축소기 또는 실험용 플래그에서 발견되는 문제를 신고해 주세요. 문제 진단에 유용하도록 또는 임시 해결책으로 프로젝트의 gradle.properties
에 android.enableNewResourceShrinker=false
를 추가하여 이전 구현으로 돌아갈 수 있습니다.
새 축소기는 사용하지 않는 파일 기반 리소스를 이전 리소스 축소기와 약간 다른 최소 파일로 바꾸지만 런타임에 영향을 미치지는 않을 것으로 예상됩니다.
이전 구현은 Android Gradle 플러그인 8.0.0에서 삭제될 예정입니다.
빌드 변형 게시
Android Gradle 플러그인 7.1.0 이상에서는 Apache Maven 저장소에 게시할 빌드 변형을 구성할 수 있습니다. AGP에서는 새로운 게시 DSL을 기반으로 빌드 변형 하나 또는 여러 개로 구성요소가 생성되며, 이 구성요소를 사용하여 Maven 저장소에 대한 게시를 맞춤설정할 수 있습니다. 또한 이전 버전과 비교할 때 구성요소가 기본적으로 생성되지 않으므로 불필요한 작업이 방지됩니다. 자세한 내용은 게시 코드 샘플을 참고하세요.
Javadoc JAR 게시
AGP 7.1.0 이상에서는 라이브러리 프로젝트용 AAR 외에도 자바 및 Kotlin 소스에서 Javadoc을 생성하고 Javadoc JAR 파일을 게시할 수 있습니다. Javadoc은 POM 및 Gradle Module Metadata{:.external} 파일에 추가됩니다. singleVariant
또는 multipleVariants
게시 블록에 withJavadocJar()
를 추가하여 이 기능을 사용 설정합니다.
자세한 내용은 게시 옵션 코드 샘플을 참고하세요.
소스 JAR 게시
AGP 7.1.0 이상에서는 라이브러리 프로젝트용 AAR 외에도 자바 및 Kotlin 소스 JAR 파일을 게시할 수 있습니다. 소스는 POM 및 Gradle Module Metadata{:.external} 파일에 추가됩니다. singleVariant
또는 multipleVariants
게시 블록에 withSourcesJar()
를 추가하여 이 기능을 사용 설정할 수 있습니다. 자세한 내용은 게시 옵션 코드 샘플을 참고하세요.
린트 블록 시맨틱 변경
문제의 특정 심각도 수준을 재정의하는 모든 린트 메서드(enable
, disable
/ignore
, informational
, warning
, error
, fatal
)가 이제 구성의 순서를 따릅니다. 예를 들어 이제는 finalizeDsl()
에서 문제를 심각한 것으로 설정하면 기본 DSL에서 사용 중지가 재정의됩니다. 자세한 내용은 lint{}
블록 참조 문서 및 Android 빌드 흐름 및 확장 지점을 참고하세요.
Navigation Safe Args 호환성
Navigation Safe Args Gradle 플러그인이 종속된 AGP API가 삭제되었습니다. AGP 7.1은 Navigation Safe Args 버전 2.4.0-rc1 또는 2.4.0에서 작동하지 않지만 2.5.0-alpha01 및 2.4.1 버전에서는 작동할 것입니다. 그동안에 해결책으로 Navigation Safe Args의 스냅샷 빌드 Navigation 2.5.0-SNAPSHOT에서 AGP 7.1을 사용할 수 있습니다. 스냅샷 빌드를 사용하려면 빌드 ID가 #8054565인 스냅샷 안내를 따르세요.
또한 Navigation Safe Args 2.4.1 및 2.5.0 버전은 더 이상 AGP 4.2에서 작동하지 않습니다. 이 버전의 Safe Args를 사용하려면 AGP 7.0 이상을 사용해야 합니다.
자동 구성요소 생성 사용 중지
AGP 8.0부터 자동 구성요소 생성이 기본적으로 사용 중지됩니다.
현재 AGP 7.1은 빌드 변형별로 빌드 변형과 이름이 동일한 구성요소와 모든 빌드 변형을 포함하는 all
구성요소를 자동으로 만듭니다. 이러한 자동 구성요소 생성은 사용 중지될 것입니다. 이러한 새 동작으로 전환하려면 android.disableAutomaticComponentCreation
을 true.
로 설정하여 자동 구성요소 생성을 수동으로 사용 중지해야 합니다. 자세한 내용은 Maven 게시 플러그인 사용을 참고하세요.
Firebase Performance Monitoring 호환성
AGP 7.1은 Firebase Performance Monitoring Gradle 플러그인 1.4.0 이하 버전과 호환되지 않습니다. AGP 업그레이드 어시스턴트는 플러그인을 1.4.1 버전으로 자동 업데이트하지 않습니다. 따라서 firebase-perf
를 사용 중이며 AGP를 7.1로 업그레이드하려면 이 특정 업그레이드를 수동으로 실행해야 합니다.
알려진 문제
이 섹션에서는 Android Gradle 플러그인 7.1.0에서 발생한 알려진 문제에 관해 설명합니다.
Hilt 플러그인을 사용하는 앱 프로젝트의 단위 테스트 관련 문제
단위 테스트 클래스 경로에는 계측되지 않은 앱 클래스가 포함되어 있습니다. 즉, 단위 테스트를 실행할 때 Hilt에서 앱 클래스를 계측하여 종속 항목 삽입을 처리하지 않습니다.
이 문제는 7.1.1 버전에서 수정될 예정입니다. 문제 #213534628을 참고하세요.