Warianty publikacji umożliwiają dostosowanie treści do potrzeb użytkowników. Skonfigurowanie wariantów publikacji pozwala opublikować różne warianty kompilacji, i każdy z nich ma własne atrybuty.
Jeśli opublikujesz w bibliotece wiele wariantów kompilacji, użytkownik będzie mógł wybrać funkcje odpowiednie do ich potrzeb. Możesz na przykład publikować różne artefakty dla debugowanie i wersja typów kompilacji. Artefakt publikacji na potrzeby debugowania może mieć dodatkowy kod logowania i aby włączyć to dodatkowe logowanie.
Zanim przejdziesz dalej, upewnij się, przygotować bibliotekę do publikacji.
Używanie metadanych modułu Gradle
Aby opublikować warianty biblioteki, musisz użyć Metadane modułu Gradle (GMM). Mapy Google dla komórek opisują Twoją publikację i pozwalają zarządzania zależnościami z uwzględnieniem wariantów. Aplikacja GMM jest domyślnie publikowana w Twojej bibliotece.
Zalety korzystania z Map Google na komórki:
- Jeśli używasz GMM w przypadku Gradle w wersji 6.0 lub nowszej, możesz publikować wiele publikacji Warianty lub kilka artefaktów – każdy z własnymi atrybutami i zależnościami. Jeśli używasz pliku POM Maven zamiast GMM możesz opublikować tylko jeden artefakt. Jeśli korzystasz z pliku POM, można opublikować dodatkowe artefakty za pomocą klasyfikatorów, ale dodatkowe artefakty nie mogą mieć własnych zależności.
- Gradle automatycznie tworzy 1 wariant do kompilacji i 1 dla czasu działania
z osobnymi zależnościami. Możesz opublikować 1 wariant do kompilacji
i drugą dla środowiska wykonawczego, dzięki czemu konsument może wybierać na podstawie tego,
w bibliotece. GMM pokazuje konsumentom różne zależności
na podstawie wykorzystania przez opublikowaną bibliotekę
api
,implementation
lubcompileOnly
/runtimeOnly
. Zobacz Konfiguracje zależności aby zobaczyć pełną listę zależności. Ta funkcja jest dostępna nawet wtedy, gdy publikujesz wersji publikacji. - Jeśli korzystasz z sprzętu testowego, możesz opublikować dodatkowy wariant ze specjalnymi metadanych lub możliwości które pozwalają konsumentowi wybrać produkt. Ta funkcja jest dostępna nawet po opublikowaniu jednego wariantu publikacji.
Informacje o wariantach publikacji
Aby zrozumieć, jak działają warianty publikacji, Gradle podstawowych czynnościach publikowania. Oto kilka najważniejszych pojęć związanych z publikacją:
- Wariant kompilacji: konfiguracja, której Gradle używa do kompilacji biblioteki, to iloczyn typu kompilacji i smaku produktu. Aby dowiedzieć się więcej, przeczytaj Glosariusz kompilacji na Androida.
- Artefakt: Plik lub katalog tworzony przez kompilację. W kontekście działalności wydawniczej artefakt jest zwykle plikiem JAR lub AAR.
- Wariant publikacji: Artefakt wraz z powiązanymi atrybutami, funkcjami i zależnościami. Notatka które Gradle nazywa warianty publikacji wariantami. Są to jednak nazwy wariantów publikacji w tych dokumentach, aby odróżnić je od utwórz warianty.
- Atrybut:
Gradle używa atrybutów do identyfikowania i wybierania wersji publikacji, gdy występują
mamy do wyboru wiele opcji. Na przykład:
org.gradle.usage=java-api
iorg.gradle.jvm.version=11
to atrybuty wersji. - Komponent oprogramowania:
Obiekt Gradle, który może zawierać co najmniej 1 wariant publikacji i został opublikowany
do pojedynczego zestawu współrzędnych Maven (
groupdId:artifactId:version
). Jest są widoczne w DSL Gradle przezProject.getComponents()
- Publikacja:
Co jest publikowane w repozytorium i używane przez konsumentów. Publikacje składają się
jednego komponentu oprogramowania i jego metadanych, np. jego tożsamości
(
groupId:artifactId:version
).
Wtyczka Androida do obsługi Gradle (AGP) 7.1 wprowadza
język specyficzny dla domeny (DSL) do kontrolowania, które warianty kompilacji są używane
do publikacji, a które są ignorowane. DSL umożliwia tworzenie instancji
SoftwareComponent
, które zawierają jeden z tych elementów:
- 1 wariant publikacji z 1 wariantu kompilacji
- Kilka wariantów publikacji z kilku wariantów kompilacji
Podczas tworzenia komponentu oprogramowania z kilkoma wersjami publikacji pakiet AGP ustawia atrybutów zwiększających sprzedaż w każdej z wersji, dzięki czemu konsument może wybrać z odpowiedniej wersji. Te atrybuty pochodzą bezpośrednio z kompilacji (rodzaj i smaki) użytych do utworzenia wariantu kompilacji. Tworzenie komponent z jedną wersją publikacji nie wymaga atrybutów, ponieważ nie trzeba rozróżniać.
Utwórz komponent oprogramowania z 1 wariantem publikacji
Ten fragment kodu konfiguruje komponent oprogramowania z pojedynczą publikacją
wariant utworzony na podstawie wariantu kompilacji release
z dodanym źródłowym plikiem JAR jako
artefakt dodatkowy:
Kotlin
android { publishing { singleVariant("release") { withSourcesJar() } } }
Odlotowe
android { publishing { singleVariant('release') { withSourcesJar() } } }
Możesz utworzyć kilka komponentów, z których każdy będzie miał 1 wariant publikacji.
rozkładają się według różnych współrzędnych Maven. W tym przypadku atrybuty
nie są ustawione dla wariantu publikacji. Nie można stwierdzić, że ta publikacja
wariant pochodzi z wariantu kompilacji release
, patrząc na publikację
metadanych. Wykorzystuje do tego tylko 1 wariant publikacji, więc nie ma potrzeby
do ujednolicenia.
Tworzenie komponentu oprogramowania z wieloma wariantami publikacji
Możesz wybrać wszystkie warianty kompilacji lub ich część do umieszczenia w jednym oprogramowaniu . AGP automatycznie używa nazw typów kompilacji, rodzajów usług nazwy i wymiary smaków produktów, aby tworzyć atrybuty, dzięki którym aby łatwo było je odróżnić.
Aby opublikować wszystkie warianty kompilacji w 1 komponencie, wybierz allVariants()
w bloku multipleVariants{}
w pliku build.gradle
na poziomie modułu:
Kotlin
android { publishing { multipleVariants { allVariants() withJavadocJar() } } }
Odlotowe
android { publishing { multipleVariants { allVariants() withJavadocJar() } } }
Spowoduje to utworzenie pojedynczego komponentu o nazwie default
. Aby nazwać komponent
w inny sposób, użyj multipleVariants({name})
.
W tym przypadku używane są wszystkie wymiary dotyczące typu kompilacji i rodzaju produktu.
.
Aby wybrać, które warianty mają być publikowane, użyj parametru
includeBuildTypeValues()
i includeFlavorDimensionAndValues()
:
Kotlin
android { publishing { multipleVariants("custom") { includeBuildTypeValues("debug", "release") includeFlavorDimensionAndValues( dimension = "color", values = arrayOf("blue", "pink") ) includeFlavorDimensionAndValues( dimension = "shape", values = arrayOf("square") ) } } }
Odlotowe
android { publishing { multipleVariants('custom') { includeBuildTypeValues('debug', 'release') includeFlavorDimensionAndValues( /*dimension =*/ 'color', /*values =*/ 'blue', 'pink' ) includeFlavorDimensionAndValues( /*dimension =*/ 'shape', /*values =*/ 'square' ) } } }
W tym przykładzie komponent niestandardowy zawiera wszystkie kombinacje komponentów
(debug
, release
) w przypadku typu kompilacji (blue
, pink
) w przypadku wymiaru color
,
i (square
) dla wymiaru shape
.
Muszą być wymienione wszystkie wymiary dotyczące rodzajów, nawet jeśli publikujesz tylko jedną wartość. z wymiaru, dzięki czemu narzędzie AGP wie, której wartości użyć dla każdego wymiaru.
W poniższej tabeli podano powstałe w ten sposób warianty publikacji i ich powiązanych atrybutów.
Wariant | Atrybuty |
---|---|
blueSquareDebug | com.android.build.api.attributes.BuildTypeAttr ="debug"
com.android.build.api.attributes.ProductFlavorAttr:color ="blue" |
blueSquareRelease |
com.android.build.api.attributes.BuildTypeAttr="release"
|
pinkSquareDebug |
com.android.build.api.attributes.BuildTypeAttr="debug"
|
pinkSquareRelease |
com.android.build.api.attributes.BuildTypeAttr="release"
|
W praktyce pojawia się więcej wariantów. Przykład:
każdy z powyższych wariantów jest publikowany dwukrotnie – raz na potrzeby kompilacji i jeden raz na potrzeby
środowiska wykonawczego z różnymi zależnościami (w zależności od tego, czy zadeklarowane zależności
użyj implementation
lub api
) i inną wartość atrybutu
org.gradle.Usage
Artefakty (plik AAR) dla tych 2 wariantów są
tak samo.
Więcej informacji:
publishing
dokumentacji API.
Problem ze zgodnością w przypadku publikowania bibliotek różnych typów
Projekt, który korzysta z pakietu AGP 7.0 lub starszej wersji, nie może korzystać z opublikowanych bibliotek różnych typów.
z kodem AGP 7.1 lub nowszym. Jest to znany problem spowodowany zmianą atrybutu
nazwa wymiaru smaku produktu od dimensionName
do
com.android.build.api.attributes.ProductFlavor:dimensionName
w AGP 7.1.
W zależności od konfiguracji projektu możesz używać instrukcji missingDimensionStrategy
do pracy przy użyciu
starego wariantu API
wokół tej kwestii.
Załóżmy na przykład, że Twój projekt aplikacji ma tylko wersję usługi wymiar smaku:
Kotlin
android {
applicationVariants.forEach { variant ->
val flavor = variant.productFlavors[0].name
val attributePrefix = "com.android.build.api.attributes.ProductFlavor"
val dimensionName = "version"
variant.missingDimensionStrategy("$attributePrefix:$dimensionName", flavor)
}
}
Odlotowe
android {
applicationVariants.forEach { variant ->
def flavor = variant.getProductFlavors()[0].name
def attributePrefix = "com.android.build.api.attributes.ProductFlavor"
def dimensionName = "version"
variant.missingDimensionStrategy("$attributePrefix:$dimensionName", flavor)
}
}