Questa sezione descrive argomenti avanzati utili quando vuoi estendere il plug-in Android per Gradle o scrivere il tuo plug-in.
Pubblicare le dipendenze delle varianti nella logica personalizzata
Una libreria può avere funzionalità che altri progetti o sottoprogetti potrebbero voler utilizzare. La pubblicazione di una libreria è il processo mediante il quale la libreria viene messa a disposizione dei suoi consumatori. Le librerie possono controllare le dipendenze a cui i suoi consumatori hanno accesso in fase di compilazione e di esecuzione.
Esistono due configurazioni separate che contengono le dipendenze trasitive di ogni percorso di classe, che devono essere utilizzate dai consumatori per utilizzare la libreria come descritto di seguito:
variant_nameApiElements
: questa configurazione contiene le dipendenze trascendenti disponibili per i consumatori in fase di compilazione.variant_nameRuntimeElements
: questa configurazione contiene le dipendenze trasitive disponibili per i consumatori in fase di esecuzione.
Per scoprire di più sulle relazioni tra le diverse configurazioni, consulta Le configurazioni del plug-in della libreria Java.
Strategie di risoluzione delle dipendenze personalizzate
Un progetto potrebbe includere una dipendenza da due versioni diverse della stessa libreria, il che può portare a conflitti di dipendenza. Ad esempio, se il progetto dipende dalla versione 1 del modulo A e dalla versione 2 del modulo B e il modulo A dipende in modo transitivo dalla versione 3 del modulo B, si verifica un conflitto di versione delle dipendenze.
Per risolvere questo conflitto, il plug-in Gradle per Android utilizza la seguente strategia di risoluzione delle dipendenze: quando il plug-in rileva che nel grafico delle dipendenze sono presenti versioni diverse dello stesso modulo, per impostazione predefinita sceglie quella con il numero di versione più alto.
Tuttavia, questa strategia potrebbe non funzionare sempre come previsto. Per personalizzare la strategia di risoluzione delle dipendenze, utilizza le seguenti configurazioni per risolvere dipendenze specifiche di una variante necessarie per l'attività:
variant_nameCompileClasspath
: questa configurazione contiene la strategia di risoluzione per il percorso di compilazione di una determinata variante.variant_nameRuntimeClasspath
: questa configurazione contiene la strategia di risoluzione per il percorso di classe di runtime di una determinata variante.
Il plug-in Android Gradle include getter che puoi utilizzare per accedere agli oggetti di configurazione di ogni variante. Di conseguenza, puoi utilizzare l'API Variant per eseguire query sulla risoluzione delle dipendenze, come mostrato nell'esempio seguente:
Kotlin
android { applicationVariants.all { // Return compile configuration objects of a variant. compileConfiguration.resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. runtimeConfiguration.resolutionStrategy { ... } // Return annotation processor configuration of a variant. annotationProcessorConfiguration.resolutionStrategy { ... } } }
Groovy
android { applicationVariants.all { variant -> // Return compile configuration objects of a variant. variant.getCompileConfiguration().resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. variant.getRuntimeConfiguration().resolutionStrategy { ... } // Return annotation processor configuration of a variant. variant.getAnnotationProcessorConfiguration().resolutionStrategy { ... } } }