In diesem Abschnitt werden erweiterte Themen beschrieben, die nützlich sind, wenn Sie das Android-Gradle-Plug-in verwenden oder ein eigenes Plug-in schreiben.
Variantenabhängigkeiten in benutzerdefinierter Logik veröffentlichen
Eine Bibliothek kann Funktionen enthalten, die andere Projekte oder Unterprojekte möglicherweise die Sie verwenden möchten. Die Veröffentlichung einer Bibliothek ist der Vorgang, bei dem sie erstellt wird. Verbrauchern zur Verfügung stehen. Bibliotheken können steuern, welche Abhängigkeiten auf die Verbraucher zur Kompilierungszeit und Laufzeit Zugriff haben.
Es gibt zwei separate Konfigurationen, die die transitiven Abhängigkeiten Jeder Klassenpfad, der von Nutzern verwendet werden muss, um die Bibliothek als wie unten beschrieben:
variant_nameApiElements
: Diese Konfiguration enthält die transitive Abhängigkeiten, die den Benutzern bei der Kompilierung zur Verfügung stehen.variant_nameRuntimeElements
: Diese Konfiguration enthält die transitiven Abhängigkeiten, die Nutzern zur Laufzeit zur Verfügung stehen.
Weitere Informationen zu den Beziehungen zwischen den verschiedenen Konfigurationen gehen Sie zur Java-Bibliothek Plug-in-Konfigurationen.
Benutzerdefinierte Strategien zur Auflösung von Abhängigkeiten
Ein Projekt kann eine Abhängigkeit von zwei verschiedenen Versionen derselben Bibliothek enthalten. was zu Abhängigkeitskonflikten führen kann. Wenn Ihr Projekt beispielsweise von Version 1 von Modul A und Version 2 des Modul B und Modul A vorübergehend von Version 3 von Modul B abhängen. tritt ein Konflikt mit einer Abhängigkeitsversion auf.
Zur Behebung dieses Konflikts verwendet das Android-Gradle-Plug-in Folgendes: Strategie für Abhängigkeitsauflösung: wenn das Plug-in erkennt, dass verschiedene Versionen desselben Moduls befinden sich im Abhängigkeitsdiagramm. Standardmäßig wählt es das Modul mit der höchsten Versionsnummer.
Diese Strategie funktioniert jedoch möglicherweise nicht immer wie beabsichtigt. So passen Sie die wenn Sie die Abhängigkeitsauflösung nutzen, verwenden Sie die folgenden Konfigurationen, bestimmte Abhängigkeiten einer Variante aufzulösen, die für Ihre Aufgabe benötigt werden:
variant_nameCompileClasspath
: Diese Konfiguration enthält die Auflösungsstrategie für den Kompilierungsklassenpfad einer bestimmten Variante.variant_nameRuntimeClasspath
: Diese Konfiguration enthält die Auflösungsstrategie für den Laufzeit-Klassenpfad einer bestimmten Variante.
Das Android-Gradle-Plug-in umfasst Getter, mit denen Sie auf die Konfigurationsobjekte der jeweiligen Variante. Mit der Variant API können Sie die Abhängigkeitsauflösung abfragen, wie im folgenden Beispiel gezeigt:
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 { ... } } }
Cool
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 { ... } } }