모듈이 많은 프로젝트에서는 명확한 프로젝트 구조를 유지하면서 사용자에게 Android 라이브러리를 배포하기가 어려울 수 있습니다. 의도한 것보다 훨씬 많은 라이브러리를 게시해야 하는 경우가 많습니다.
Android Gradle 플러그인과 함께 번들로 제공되는 Fused Library 플러그인은 여러 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
파일의 플러그인 블록에alias(libs.plugins.android.fusedlibrary) apply false
를 추가합니다. myFusedLibrary
모듈을 만들려면myFusedLibrary
이라는 새 디렉터리를 만듭니다('내 애플리케이션'을 마우스 오른쪽 버튼으로 클릭 > 새로 만들기 > 디렉터리).myFusedLibrary
모듈에서build.gradle.kts
파일을 만듭니다(myFusedLibrary
모듈을 마우스 오른쪽 버튼으로 클릭 > 새로 만들기 > 파일).- 다음을
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 게시 플러그인은 Fused Library 플러그인이 적용된 모듈에도 적용해야 합니다.
- 게시가
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 리소스 파일은 허용되지 않으며 빌드 실패가 발생합니다. |
알려진 문제
융합 라이브러리는 새로운 플러그인이며 모든 사용 사례를 충족하기 위해 해결 중인 알려진 문제가 있습니다.
- 소스 JAR 파일을 생성할 수 없음
- 다른 .aar 파일에 파일 종속 항목 추가
- RenderScript와 Prefab 아티팩트의 융합 지원 안 함
융합 라이브러리의 종속 항목 이해
융합 라이브러리에는 소스가 없고 Android 라이브러리를 유일한 소스로 효과적으로 사용하므로 어디에서 무엇이 제공되는지 이해하는 것이 중요합니다. 결과 아티팩트에 병합된 종속 항목과 아티팩트를 빌드하는 데 필요한 종속 항목을 나열하려면 융합된 라이브러리에서 gradle :report
작업을 실행합니다. 이 작업은 융합 라이브러리의 build/reports
디렉터리에 저장되는 JSON 보고서를 생성합니다.
내부 플러그인 종속 항목과 관련된 추가 정보를 확인하려면 gradle :dependencies
작업을 실행하여 플러그인 구성 상태를 확인하세요.