모듈이 많은 프로젝트에서는 명확한 프로젝트 구조를 유지하면서 Android 라이브러리를 사용자에게 배포하기가 어려울 수 있습니다. 많은 경우 의도한 것보다 훨씬 많은 라이브러리를 게시해야 합니다.
Android Gradle 플러그인과 번들로 제공되는 융합 라이브러리 플러그인은 여러 Android 라이브러리 모듈을 단일 게시 가능한 Android 라이브러리로 패키징하는 데 도움이 됩니다. 이렇게 하면 빌드 내에서 라이브러리의 소스 코드와 리소스를 적절하게 모듈화하면서 배포된 후 프로젝트 구조가 노출되는 것을 방지할 수 있습니다.
단일 라이브러리로 배포하면 다음과 같은 이점이 있습니다.
- 간소화된 종속 항목: 여러 라이브러리 종속 항목을 단일 AAR로 대체하여 사용자를 위한 프로젝트 설정 및 버전 관리를 간소화합니다.
- 라이브러리 크기 감소: 코드 축소가 개선되어 AAR이 더 작아질 수 있습니다.
- 보안 개선: 게시된 라이브러리의 내부 구현 세부정보를 더 효과적으로 제어할 수 있습니다.
융합 라이브러리 만들기
융합 라이브러리를 빌드하려면 새 Android 모듈을 만들고 종속 항목을 추가한 후 융합 라이브러리를 게시해야 합니다.
새 융합 라이브러리 모듈 추가
이 플러그인을 사용하려면 프로젝트에 새 Android 모듈을 추가해야 합니다.
이 예시에서는 융합된 라이브러리 모듈을 myFusedLibrary
이라고 합니다.
gradle.properties
파일에android.experimental.fusedLibrarySupport=true
를 추가하여 융합 라이브러리 지원을 사용 설정합니다.include(":myFusedLibrary")
을settings.gradle.kts
파일에 추가합니다.gradle/libs.versions.toml
파일의[plugins]
섹션 아래에android-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }
를 추가합니다.- 최상위
build.gradle.kts
파일의 plugins 블록에alias(libs.plugins.android.fusedlibrary) apply false
를 추가합니다. myFusedLibrary
모듈을 만들려면myFusedLibrary
라는 새 디렉터리를 만듭니다('My Application'(내 애플리케이션)을 마우스 오른쪽 버튼으로 클릭한 다음 New(새로 만들기) > Directory(디렉터리)를 선택).myFusedLibrary
모듈에build.gradle.kts
파일을 만듭니다(myFusedLibrary
모듈을 마우스 오른쪽 버튼으로 클릭 > New > File).- 다음을
myFusedLibrary/build.gradle.kts
파일에 붙여넣습니다.
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { namespace = "com.example.myFusedLibrary" minSdk = 21 } dependencies { }
Groovy
plugins { id 'fused-library' } androidFusedLibrary { namespace 'com.example.myFusedLibrary' minSdk 21 } dependencies { }
종속 항목 추가
융합 라이브러리의 핵심 기능은 종속 항목을 번들로 묶는 것입니다. 이 플러그인은 로컬 프로젝트 종속 항목과 외부 라이브러리 추가를 지원합니다.
패키징할 종속 항목을 지정하려면 include
구성을 사용하세요.
전이 종속 항목은 패키징되지 않습니다.
예를 들면 다음과 같습니다.
Kotlin
dependencies { include(project(":image-rendering")) include("mycoolfonts:font-wingdings:5.0") }
Groovy
dependencies { include project(':image-rendering') include 'mycoolfonts:font-wingdings:5.0' }
융합된 라이브러리 게시
융합 라이브러리를 게시하기 전에 Android 라이브러리 게시를 숙지해야 합니다. 융합 라이브러리를 게시하는 것은 Android 라이브러리를 게시하는 것과 유사하지만 융합 라이브러리를 올바르게 게시하려면 고려해야 할 몇 가지 주요 차이점이 있습니다.
- Maven 게시 플러그인은 융합 라이브러리 플러그인이 적용된 모든 모듈에도 적용해야 합니다.
- 융합된 라이브러리 아티팩트를 컴파일하는 데 필요한 종속 항목을 제공하므로 게시물은
fusedLibraryComponent
에서 상속받아야 합니다.
다음은 게시물 구성의 예입니다.
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { … } dependencies { … } publishing { publications { register<MavenPublication>("release") { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" from(components["fusedLibraryComponent"]) } } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } androidFusedLibrary { … } dependencies { … } publishing { publications { release(MavenPublication) { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" afterEvaluate { from components.fusedLibraryComponent } } }
테스트를 위해 융합 라이브러리 게시
Android 앱 또는 Android 라이브러리의 게시된 융합 라이브러리에 따라 테스트해야 합니다. 융합된 라이브러리와 프로젝트 종속 항목을 로컬 Maven 저장소에 게시하는 것이 좋습니다.
융합된 라이브러리 아티팩트를 로컬 저장소에 게시하려면 다음과 유사한 구성을 정의합니다.
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } repositories { maven { name = "myLocalRepo" url = uri(layout.buildDirectory.dir("myLocalRepo")) } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } repositories { maven { name 'myLocalRepo' url layout.buildDirectory.dir('myLocalRepo') } }
융합된 라이브러리 업로드
융합된 라이브러리를 배포하려면 라이브러리 업로드를 참고하세요.
동작 및 보호 조치
Android 라이브러리를 결합하는 데는 플러그인이 우선순위를 추론하기 어려울 수 있는 복잡성이 있습니다. 예를 들어 클래스 패스가 동일한 두 라이브러리는 라이브러리를 융합할 때 빌드 실패를 일으킵니다. 리소스 병합은 여러 라이브러리에서 동일한 이름의 리소스를 선택할 때 지정된 종속 항목 순서를 고려합니다.
- 융합된 라이브러리는 종속 항목으로 추가되기 위해 Android 라이브러리 아티팩트 AAR로만 게시할 수 있습니다.
- 데이터 결합을 사용하는 라이브러리의 융합은 지원되지 않습니다.
- 단일 융합 라이브러리 내에서 여러 빌드 유형과 제품 버전을 융합할 수는 없습니다. 다양한 변형에 대해 별도의 융합 라이브러리를 만듭니다.
필요한 구성의 양과 사용 편의성 간의 균형을 맞추기 위해 플러그인은 모호한 충돌이 발생하면 빌드를 실패시키거나 아티팩트를 융합할 때 휴리스틱을 사용합니다. 아티팩트가 융합되는 방식에 관한 자세한 내용은 다음 표를 참고하세요.
유형 | 동작 |
---|---|
클래스 | 클래스 경로가 동일한 라이브러리는 라이브러리를 융합할 때 빌드 실패를 일으킵니다. |
Android 리소스 | 리소스 병합은 다른 위치에서 동일한 이름의 리소스를 선택할 때 지정된 종속 항목의 순서를 고려합니다. |
AAR 메타데이터 | AAR 메타데이터 버전은 각 종속 항목 라이브러리의 가장 높은 값을 우선하여 병합됩니다. 이러한 값을 재정의하는 DSL이 제공됩니다. KotlinandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
Java 리소스 | 경로가 동일한 여러 라이브러리의 Java 리소스 파일은 허용되지 않으며 빌드 실패가 발생합니다. |
알려진 문제
융합 라이브러리는 새로운 플러그인이며 모든 사용 사례를 충족하기 위해 해결 중인 알려진 문제가 있습니다.
lint.jar
파일이 융합된 AAR에 포함되지 않음- 다른 .aar 파일에 파일 종속 항목 추가
- RenderScript 및 Prefab 아티팩트 융합 지원 불가
융합 라이브러리의 종속 항목 이해
융합 라이브러리에는 소스가 없으며 Android 라이브러리를 유일한 소스로 효과적으로 사용하므로 어디에서 가져온 것인지 이해하는 것이 중요합니다. 결과 아티팩트에 병합된 종속 항목과 아티팩트를 빌드하는 데 필요한 종속 항목을 나열하려면 융합된 라이브러리에서 gradle :report
작업을 실행합니다. 태스크는 융합 라이브러리의 build/reports
디렉터리에 저장되는 JSON 보고서를 생성합니다.
내부 플러그인 종속 항목과 관련된 자세한 내용은 gradle :dependencies
태스크를 실행하여 플러그인 구성 상태를 확인하세요.