web-dev-qa-db-fra.com

Pourquoi Android changer la configuration de 'compilation' en 'implémentation' dans les dépendances Gradle?

Comme vu dans Android Studio 3.0 (canary 3.0), nous ajoutons maintenant depedencies en déclarant implementation au lieu de la configuration compile.

// Before
compile 'com.Android.support:appcompat-v7:25.3.1'

// Currently
implementation 'com.Android.support:appcompat-v7:25.3.1'

Nous pouvons toujours utiliser compile, mais je voudrais comprendre:

  • Quelle est la différence entre la configuration implementation et compile?
  • Pourquoi Android Gradle build change pour utiliser implementation par défaut?
14
Quang Nguyen

Il semble que compile soit obsolète et que api ou implementation devrait être utilisé à la place. Selon Le Java Plugin de bibliothèque - Guide de l'utilisateur Gradle version 3.5 :

La configuration compile existe toujours mais ne doit pas être utilisée car elle n'offre pas les garanties que fournissent les configurations api et implementation.

14
petter

Grâce au lien vraiment utile de @petter, je voudrais ajouter un résumé comme suit.

Cela signifie que Android Gradle build commence à utiliser le Java-library plugin au lieu de son précédent Java plugin. Ce plugin présente le exposed API concept avec deux configuration pour déclarer les dépendances.

  1. api

doit être utilisé pour déclarer les dépendances qui sont exportées par l'API de la bibliothèque

Par exemple, dans le cas où vous créez une bibliothèque Java (ou Android) qui est utilisée par d'autres applications. Si vous utilisez une bibliothèque tierce et que vous souhaitez exposer son API à votre consommateur de bibliothèque aussi, vous devez déclarer comme ceci.

api 'commons-httpclient:commons-httpclient:3.1'
  1. implémentation

doit être utilisé pour déclarer des dépendances internes au composant.

Lors du développement de Android, notre module app est le point final qui n'a pas besoin d'exposer une partie en externe. implementation doit être utilisé.

implementation 'org.Apache.commons:commons-lang3:3.5'

La configuration précédente compile fonctionne de la même manière que api. Le implementation apporte cependant les avantages suivants.

  • les dépendances ne s'infiltrent plus dans le chemin de classe de compilation des consommateurs, vous ne dépendrez donc jamais accidentellement d'une dépendance transitive
  • compilation plus rapide grâce à une taille de chemin de classe réduite
  • moins de recompilations lorsque les dépendances d'implémentation changent: les consommateurs n'auraient pas besoin d'être recompilés
  • publication plus propre: lorsqu'elle est utilisée avec le nouveau plugin maven-publish, Java produisent des fichiers POM qui
    faire la distinction exacte entre ce qui est nécessaire pour compiler
    et ce qui est nécessaire pour utiliser la bibliothèque au moment de l'exécution (en d'autres termes, ne mélangez pas ce qui est nécessaire pour compiler la bibliothèque elle-même et
    ce qui est nécessaire pour compiler avec la bibliothèque).
29
Quang Nguyen