Le compile
mot clé Gradle a été déconseillé au profit des mots clés api
et implementation
pour configurer les dépendances.
Utiliser api
équivaut à utiliser le obsolète compile
, donc si vous remplacez tout compile
par api
tout, cela fonctionnera comme toujours.
Pour comprendre le implementation
mot - clé, considérons l'exemple suivant.
EXEMPLE
Supposons que vous ayez une bibliothèque appelée MyLibrary
qui utilise en interne une autre bibliothèque appelée InternalLibrary
. Quelque chose comme ça:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
Supposons que la configuration MyLibrary
build.gradle
utilise comme ceci:api
dependencies{}
dependencies {
api project(':InternalLibrary')
}
Vous voulez utiliser MyLibrary
dans votre code donc dans votre application build.gradle
vous ajoutez cette dépendance:
dependencies {
implementation project(':MyLibrary')
}
En utilisant la api
configuration (ou obsolète compile
), vous pouvez accéder InternalLibrary
dans votre code d'application:
// Access 'MyLibrary' (granted)
MyLibrary myLib = new MyLibrary();
System.out.println(myLib.myString());
// Can ALSO access the internal library too (and you shouldn't)
System.out.println(InternalLibrary.giveMeAString());
De cette façon, le module MyLibrary
«fuit» potentiellement l'implémentation interne de quelque chose. Vous ne devriez pas (pouvoir) l'utiliser car il n'est pas directement importé par vous.
La implementation
configuration a été introduite pour éviter cela. Alors maintenant, si vous utilisez implementation
au lieu de api
dans MyLibrary
:
dependencies {
implementation project(':InternalLibrary')
}
vous ne pourrez plus appeler InternalLibrary.giveMeAString()
votre code d'application.
Ce type de stratégie de boxe permet au plugin Android Gradle de savoir que si vous modifiez quelque chose InternalLibrary
, il ne doit déclencher que la recompilation MyLibrary
et non la recompilation de l'ensemble de votre application, car vous n'y avez pas accès InternalLibrary
.
Lorsque vous avez beaucoup de dépendances imbriquées, ce mécanisme peut accélérer considérablement la construction. (Regardez la vidéo liée à la fin pour une compréhension complète de cela)
CONCLUSIONS
Lorsque vous passez au nouveau plugin Android Gradle 3.XX, vous devez remplacer tous vos fichiers compile
par le implementation
mot - clé (1 *) . Essayez ensuite de compiler et de tester votre application. Si tout va bien, laissez le code tel quel, si vous avez des problèmes, vous avez probablement un problème avec vos dépendances ou vous avez utilisé quelque chose qui est maintenant privé et qui n'est pas plus accessible. Suggestion par l'ingénieur du plugin Android Gradle Jerome Dochez (1 ) * )
Si vous êtes un responsable de bibliothèque, vous devez utiliser api
pour chaque dépendance qui est nécessaire pour l'API publique de votre bibliothèque, tandis que implementation
pour les dépendances de test ou les dépendances qui ne doivent pas être utilisées par les utilisateurs finaux.
Article utile présentant la différence entre l' implémentation et l' API
RÉFÉRENCES
(Il s'agit de la même vidéo divisée pour gagner du temps)
Google I / O 2017 - Comment accélérer la construction de Gradle (FULL VIDEO)
Google I / O 2017 - Comment accélérer la construction de Gradle (NOUVEAU GRADLE PLUGIN 3.0.0 PART UNIQUEMENT)
Google I / O 2017 - Comment accélérer la construction de Gradle (référence à 1 * )
Documentation Android