2016-06-20 28 views
2

Ich arbeitete mit einem AAR, das auf einem lokalen Maven-Repository veröffentlicht wurde. Da ich die transitiven Abhängigkeiten, habe ich das transitive Attribut auf meine Abhängigkeiten gehören wollte:AAR Library Transitive Abhängigkeiten Konflikt?

compile ('com.mycompany.domain:artifact:[email protected]') { 
    transitive = true 
} 

Nun lassen Sie uns sagen, dass dieses Projekt hinzufügen eine Abhängigkeit von der cardView Support-Bibliothek v23:

compile "com.android.support:cardview-v7:23.4.0" 

Was bedeutet es passiert mit meiner apk Release-Datei, wenn ich auch eine Abhängigkeit von der v24 cardView Bibliothek hinzufügen:

compile "com.android.support:cardview-v7:24.0.0" 

Does Grad Ist es möglich, diese doppelte Abhängigkeit zu verwalten und die neueste zu nehmen, ohne Konflikte zu erzeugen? Oder ist es sicherer, Abhängigkeiten manuell anzugeben, ohne das Attribut transitive zu verwenden?

Außerdem importiert das Attribut transitive auch die ProGuard-Regeln, die der aar hätte setzen können?

Vielen Dank für Ihre Hilfe,

Antwort

0

ich mir die Antwort auf die Gradle offiziellen Dokumentation gefunden: Gradle Depedency Management link

Gradle Abhängigkeit Löser automatisch der Fall ist. Die zwei wichtigsten Konfliktlösung Strategien, die Gradle bietet sind:

Neueste: Die neueste Version der Abhängigkeit wird verwendet. Dies ist die Standardstrategie von Gradle und ist oft eine geeignete Wahl, solange die Versionen abwärtskompatibel sind.

Fehler: Ein Versionskonflikt führt zu einem Buildfehler. Diese Strategie erfordert, dass alle Versionskonflikte im Buildskript explizit aufgelöst werden. Weitere Informationen zum expliziten Auswählen einer bestimmten Version finden Sie unter ResolutionStrategy.

Auch cocerning ProGuard, Regeln exportiert werden sollen, wenn mit folgenden Erklärung in der Bibliothek deklariert (see this answer for more details):

defaultConfig { 
    consumerProguardFiles 'proguard-rules.txt' 
} 
3

einfach ein paar Details hinzuzufügen.

Sie verwenden die Notation @aar.
Es bedeutet, dass Sie nur das AAR-Artefakt und keine Abhängigkeiten herunterladen möchten.
können Sie prüfen, diesen Teil [Dokumentation] [1]:
prüfen 1.4.1.2. Artifact only notation Abschnitt:

Ein Artefakt nur Notation eine Modul Abhängigkeit, die mit der angegebenen Erweiterung nur die Artefakt-Datei herunterlädt, erzeugt. Vorhandene Moduldeskriptoren werden ignoriert.

die @aar Schreibweise verwenden, wenn Sie die Abhängigkeiten herunterladen möchten, sollten Sie transitive=true hinzufügen, sonst können Sie die @aar weglassen und es wird ohne Zugabe des transitive Attribut arbeiten.

Über die Abhängigkeiten.
Gradle wird die Abhängigkeiten automatisch verwalten.
Mit der Standardkonfiguration wird das Gerät die neueste Version herunterladen.

In jedem Fall können Sie auch eine eine Abhängigkeit in Ihrem build.gradle ausschließen.

compile('mylibrary:1.0.0') { 
    //excluding a particular transitive dependency: 
    exclude module: 'xxx' //by artifact name 
    exclude group: 'xxx.xxx' //by group 
    exclude group: 'xxx.xxxx', module: 'xxxx' //by both name and group 

    //disabling all transitive dependencies of this dependency 
    transitive = false 
}