Skonfiguruj warianty publikacji

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 lub compileOnly/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 i org.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 przez Project.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"
com.android.build.api.attributes.ProductFlavorAttr:color="blue"
pinkSquareDebug com.android.build.api.attributes.BuildTypeAttr="debug"
com.android.build.api.attributes.ProductFlavorAttr:color="pink"
pinkSquareRelease com.android.build.api.attributes.BuildTypeAttr="release"
com.android.build.api.attributes.ProductFlavorAttr:color="pink"

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)
    }
}