Applica logica di build personalizzata

Questa sezione descrive gli argomenti avanzati che sono utili quando vuoi estendere il plug-in Android per Gradle o scrivere il tuo plug-in.

Pubblica le dipendenze delle varianti nella logica personalizzata

Una libreria può avere funzionalità che potrebbero essere utilizzate da altri progetti o sottoprogetti che vuoi usare. La pubblicazione di una libreria è il processo con cui viene creata a disposizione dei suoi consumatori. Le librerie possono controllare le dipendenze a cui i consumatori hanno accesso in fase di compilazione e runtime.

Esistono due configurazioni separate che contengono le dipendenze transitive ogni classpath che deve essere utilizzato dai consumer per utilizzare la libreria descritti di seguito:

  • variant_nameApiElements: questa configurazione include e le dipendenze transitive disponibili per i consumatori al momento della compilazione.
  • variant_nameRuntimeElements: questa configurazione è valida le dipendenze transitive disponibili per i consumatori durante il runtime.

Per saperne di più sulle relazioni tra le diverse configurazioni, vai alla Libreria Java configurazioni dei plug-in.

Strategie personalizzate di risoluzione delle dipendenze

Un progetto può 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 di il modulo B e il modulo A dipende dalla versione 3 del modulo B. si verifica un conflitto tra versioni delle dipendenze.

Per risolvere questo conflitto, il plug-in Android Gradle utilizza quanto segue strategia di risoluzione delle dipendenze: quando il plug-in rileva che versioni diverse dello stesso modulo sono nel grafico delle dipendenze. Per impostazione predefinita, sceglie quello con il numero di versione più alto.

Tuttavia, questa strategia potrebbe non funzionare sempre come previsto. Per personalizzare una strategia di risoluzione delle dipendenze, 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 del runtime di una determinata variante.

Il plug-in Android per Gradle include getter che puoi utilizzare per accedere di configurazione di ogni variante. Di conseguenza, puoi utilizzare l'API della variante esegui una 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 {
            ...
        }
    }
}

Alla moda

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