Applica logica di build personalizzata

In questa sezione sono descritti argomenti avanzati utili quando vuoi estendere il plug-in Android per Gradle o scrivere un plug-in personalizzato.

Pubblica le dipendenze delle varianti nella logica personalizzata

Una libreria può avere funzionalità che potrebbero essere utili per altri progetti o sottoprogetti. La pubblicazione di una libreria è il processo mediante il quale la libreria è resa disponibile ai suoi consumatori. Le librerie possono controllare a quali dipendenze i suoi consumer hanno accesso in fase di compilazione e runtime.

Esistono due configurazioni separate che contengono le dipendenze transitive di ogni classpath che devono essere utilizzate dai consumatori per utilizzare la libreria, come descritto di seguito:

  • variant_nameApiElements: questa configurazione contiene le dipendenze transitive disponibili per i consumer in fase di compilazione.
  • variant_nameRuntimeElements: questa configurazione include le dipendenze transitive disponibili per i consumer in fase di runtime.

Per saperne di più sulle relazioni tra le diverse configurazioni, vedi Configurazioni dei plug-in della libreria Java.

Strategie personalizzate di risoluzione delle dipendenze

Un progetto può includere una dipendenza su due versioni diverse della stessa libreria, il che può causare conflitti di dipendenze. Ad esempio, se il tuo progetto dipende dalla versione 1 del modulo A e dalla versione 2 del modulo B, mentre il modulo A dipende in modo transitivo dalla versione 3 del modulo B, succede un conflitto tra le versioni delle dipendenze.

Per risolvere questo conflitto, il plug-in Android Gradle 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ù elevato.

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 classpath di compilazione di una determinata variante.
  • variant_nameRuntimeClasspath: questa configurazione contiene la strategia di risoluzione per il classpath 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. Quindi, puoi utilizzare l'API della variante 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 {
            ...
        }
    }
}

trendy

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 {
            ...
        }
    }
}