Warum Android "Kompilieren" in "Implementierung" Konfiguration in Gradle Abhängigkeiten ändern?

9

Wie in Android Studio 3.0 (canary 3.0) zu sehen, fügen wir jetzt depedencies hinzu, indem wir implementation anstelle von compile configuration deklarieren.

%Vor%

Wir können compile noch verwenden, aber ich würde gerne verstehen:

  • Was ist der Unterschied zwischen implementation und compile configuration?
  • Warum erstellt Android Gradle Änderungen so, dass implementation als Standard verwendet wird?
Quang Nguyen 07.06.2017, 01:19
quelle

2 Antworten

10

Es scheint, dass compile veraltet ist und stattdessen api oder implementation verwendet werden sollte. Laut Das Java Library Plugin - Gradle Benutzerhandbuch Version 3.5 :

  

Die Konfiguration compile ist noch vorhanden, sollte aber nicht verwendet werden, da sie nicht die Garantien bietet, die die Konfigurationen api und implementation bieten.

    
petter 07.06.2017, 08:31
quelle
12

Dank eines nützlichen Links von @potter möchte ich eine Zusammenfassung hinzufügen.

Dies bedeutet, dass Android Gradle Build beginnt, java-library plugin anstelle von java plugin zu verwenden. Dieses Plugin führt das exposed API -Konzept mit zwei configuration ein, um Abhängigkeiten zu deklarieren.

  1. api
  

sollte verwendet werden, um Abhängigkeiten zu deklarieren, die von der .exportiert werden   Bibliotheks-API

Wenn Sie zum Beispiel eine Java (oder Android) -Bibliothek erstellen, die von anderen Apps verwendet wird. Wenn Sie eine Bibliothek eines Drittanbieters verwenden und die API auch dem Benutzer Ihrer Bibliothek zugänglich machen möchten, sollten Sie dies wie folgt deklarieren:

%Vor%
  1. Implementierung
  

sollte verwendet werden, um Abhängigkeiten zu deklarieren, die innerhalb der   Komponente.

Bei der Entwicklung einer Android-App ist unser app -Modul der Endpunkt, an dem keine Teile außerhalb angezeigt werden müssen. implementation sollte verwendet werden.

%Vor%

Bevor compile configuration als das gleiche api funktioniert, sind die Vorteile von implementation :

  • Abhängigkeiten gehen nicht in den kompilierten Klassenpfad von Konsumenten über mehr, also wirst du niemals zufällig auf einen Transitiven angewiesen sein Abhängigkeit
  • schnellere Kompilierung dank reduzierter Klassenpfadgröße
  • weniger Neukompilierungen, wenn sich Implementierungsabhängigkeiten ändern: Verbraucher müssten nicht neu kompiliert werden
  • cleaner publishing: in Verbindung mit dem neuen maven-publish plugin, Java-Bibliotheken produzieren POM-Dateien, die
    unterscheiden genau zwischen dem, was erforderlich ist, um gegen das
    zu kompilieren Bibliothek und was benötigt wird, um die Bibliothek zur Laufzeit (in anderen Wörter, nicht mischen, was benötigt wird, um die Bibliothek selbst und
    zu kompilieren was benötigt wird, um gegen die Bibliothek zu kompilieren).
Quang Nguyen 07.06.2017 09:47
quelle