Le varianti della pubblicazione ti consentono di creare un'esperienza più personalizzata per i tuoi utenti. Configurando le varianti della pubblicazione puoi pubblicare diverse varianti di build, ognuno con i suoi attributi.
La pubblicazione di più varianti di build della libreria consente all'utente di scegliere funzionalità più adatte alle loro esigenze. Ad esempio, puoi pubblicare diversi artefatti per il debug e release tipi di build. L'artefatto della pubblicazione di debug potrebbe avere codice di logging aggiuntivo e con dipendenze diverse per abilitare questo logging aggiuntivo.
Prima di procedere, assicurati di preparare la raccolta per la nuova uscita.
Utilizzare i metadati del modulo Gradle
Per pubblicare varianti della libreria, devi utilizzare GMM (Gradle Module Metadata). GMM descrive la tua pubblicazione e gestisce gestione delle dipendenze sensibile alle varianti. Per impostazione predefinita, GMM viene pubblicato con la tua raccolta.
I vantaggi dell'utilizzo di GMM includono:
- Se utilizzi GMM con Gradle 6.0 o versioni successive, puoi pubblicare più pubblicazioni varianti o più artefatti, ognuno con i propri attributi e dipendenze. Se utilizzi il file POM di Maven anziché GMM, puoi pubblicare un solo elemento. Se utilizzi un file POM, possono pubblicare altri artefatti utilizzando i classificatori, non possono avere dipendenze proprie.
- Gradle crea automaticamente una variante per la compilazione e una per il runtime,
ciascuna con le proprie dipendenze. Potresti pubblicare una variante per la compilazione
e una per il runtime, così il consumatore può scegliere in base a quando
nella tua raccolta. GMM consente ai consumer di vedere dipendenze diverse per la compilazione
in base all'utilizzo da parte della libreria pubblicata
api
,implementation
ocompileOnly
/runtimeOnly
. Consulta Configurazioni di dipendenza per un elenco completo delle dipendenze. È disponibile anche se pubblichi una singola e la variante della pubblicazione. - Quando utilizzi impianti di prova, puoi pubblicare un'ulteriore variante con metadati abilità che consenta al consumatore di selezionarlo. È disponibile anche se pubblichi una singola variante della pubblicazione.
Informazioni sulle varianti di pubblicazione
Per capire come funzionano le varianti della pubblicazione, è utile avere familiarità con Di Gradle passaggi di base per la pubblicazione. Ecco alcuni concetti chiave della pubblicazione:
- Variante di build: la configurazione utilizzata da Gradle per creare la tua libreria, che è il prodotto incrociato tra tipo di build e sapore di prodotto. Per saperne di più, consulta Glossario di Android Build.
- Artefatto: Un file o una directory prodotto da una build. Nell'ambito della pubblicazione di biblioteche, un artefatto è solitamente un file JAR o AAR.
- Variante di pubblicazione: Un artefatto con attributi, funzionalità e dipendenze associati. Nota che Gradle chiama le varianti della pubblicazione. Tuttavia, sono chiamati varianti di pubblicazione in questi documenti per distinguerle dalle creare varianti.
- Attributo:
Gradle utilizza gli attributi per identificare e selezionare le varianti della pubblicazione quando
sono disponibili più opzioni. Ad esempio,
org.gradle.usage=java-api
eorg.gradle.jvm.version=11
sono attributi delle varianti. - Componente software:
Un oggetto Gradle che può contenere una o più varianti di pubblicazione e che è pubblicato
a un singolo insieme di coordinate Maven (
groupdId:artifactId:version
). È nel DSL di GradleProject.getComponents()
. - Pubblicazione:
Che cosa viene pubblicato nel repository e utilizzato dai consumatori. Le pubblicazioni sono costituite
di un componente software e i suoi metadati, ad esempio la sua identità
(
groupId:artifactId:version
)
Il plug-in Android Gradle (AGP) 7.1 introduce una
lingua specifica del dominio (DSL) per controllare quali varianti di build vengono utilizzate durante
pubblicazione e che vengono ignorati. Il DSL consente di creare istanze
SoftwareComponent
che contengono uno dei seguenti elementi:
- Una variante di pubblicazione da una variante di build
- Diverse varianti di pubblicazione di diverse varianti di build
Quando si crea un componente software con più varianti di pubblicazione, AGP imposta attributi su ogni variante che consentono al consumatore di selezionare la variante appropriata di cui hanno bisogno. Questi attributi provengono direttamente tipo e gusti utilizzati per creare la variante build. La creazione di un componente con una singola variante di pubblicazione non richiede attributi perché non c'è bisogno di distinguerle.
Creare un componente software con una singola variante di pubblicazione
Il seguente snippet configura un componente software con una singola pubblicazione
variante creata dalla variante di build release
e aggiunge il JAR di origine come
artefatto secondario:
Kotlin
android { publishing { singleVariant("release") { withSourcesJar() } } }
Alla moda
android { publishing { singleVariant('release') { withSourcesJar() } } }
Puoi creare diversi componenti, ciascuno con una singola variante di pubblicazione, e
distribuirle con coordinate Maven diverse. In questo caso, gli attributi
non sono impostate sulla variante della pubblicazione. Non puoi capire che questa pubblicazione
la variante proviene dalla variante build release
esaminando la pubblicazione
metadati. Poiché viene coinvolta una sola variante della pubblicazione, non è necessario
per facilitare la disambiguazione.
Creare un componente software con più varianti di pubblicazione
Puoi selezionare tutte o un sottoinsieme di varianti di build da inserire in un unico software di strumento di authoring. AGP utilizza automaticamente i nomi dei tipi di build e le versioni dei prodotti e nomi di dimensioni dei prodotti per creare attributi in modo che che consumano pochi progetti, siano in grado di distinguerli.
Per pubblicare tutte le varianti di build in un singolo componente, specifica allVariants()
nel blocco multipleVariants{}
nel file build.gradle
a livello di modulo:
Kotlin
android { publishing { multipleVariants { allVariants() withJavadocJar() } } }
Alla moda
android { publishing { multipleVariants { allVariants() withJavadocJar() } } }
In questo modo viene creato un singolo componente denominato default
. Assegna un nome al componente
altro, usa multipleVariants({name})
.
In questo caso, tutte le dimensioni relative al tipo di build e alla versione del prodotto vengono utilizzate come
attributi.
Puoi anche selezionare le varianti da pubblicare utilizzando
includeBuildTypeValues()
e includeFlavorDimensionAndValues()
:
Kotlin
android { publishing { multipleVariants("custom") { includeBuildTypeValues("debug", "release") includeFlavorDimensionAndValues( dimension = "color", values = arrayOf("blue", "pink") ) includeFlavorDimensionAndValues( dimension = "shape", values = arrayOf("square") ) } } }
Alla moda
android { publishing { multipleVariants('custom') { includeBuildTypeValues('debug', 'release') includeFlavorDimensionAndValues( /*dimension =*/ 'color', /*values =*/ 'blue', 'pink' ) includeFlavorDimensionAndValues( /*dimension =*/ 'shape', /*values =*/ 'square' ) } } }
In questo esempio, il componente personalizzato contiene tutte le combinazioni
(debug
, release
) per tipo di build, (blue
, pink
) per la dimensione color
,
e (square
) per la dimensione shape
.
Devono essere elencate tutte le dimensioni versioni, anche se pubblichi un solo valore da una dimensione, in modo che AGP sappia quale valore utilizzare per ogni dimensione.
La tabella seguente elenca le varianti della pubblicazione risultanti e le relative attributi associati.
Variante | Attributi |
---|---|
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"
|
In pratica, vengono pubblicate altre varianti. Ad esempio,
ciascuna delle varianti precedenti è pubblicata due volte, una per la compilazione e una per
runtime, con dipendenze diverse (a seconda che le dipendenze dichiarate
utilizza implementation
o api
) e con un valore diverso per l'attributo
org.gradle.Usage
. Tuttavia, gli artefatti (file AAR) di queste due varianti sono
allo stesso modo.
Per ulteriori informazioni, consulta
publishing
documentazione dell'API.
Problema di compatibilità per la pubblicazione di librerie multiversione
Un progetto che utilizza AGP 7.0 o versioni precedenti non può utilizzare le librerie multi-versione pubblicate
con AGP 7.1 o versioni successive. Si tratta di un problema noto causato da una modifica dell'attributo
nome per la dimensione flavor del prodotto da dimensionName
a
com.android.build.api.attributes.ProductFlavor:dimensionName
in AGP 7.1.
A seconda della configurazione del progetto, puoi utilizzare missingDimensionStrategy
in
della vecchia API della variante
per risolvere questo problema.
Ad esempio, supponiamo che il progetto dell'applicazione abbia solo un prodotto di versione dimensione sapore:
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)
}
}
Alla moda
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)
}
}