Le compilemot clé Gradle a été déconseillé au profit des mots clés apiet implementationpour configurer les dépendances.
Utiliser apiéquivaut à utiliser le obsolète compile, donc si vous remplacez tout compilepar apitout, cela fonctionnera comme toujours.
Pour comprendre le implementationmot - clé, considérons l'exemple suivant.
EXEMPLE
Supposons que vous ayez une bibliothèque appelée MyLibraryqui 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.gradleutilise comme ceci:apidependencies{}
dependencies {
api project(':InternalLibrary')
}
Vous voulez utiliser MyLibrarydans votre code donc dans votre application build.gradlevous ajoutez cette dépendance:
dependencies {
implementation project(':MyLibrary')
}
En utilisant la apiconfiguration (ou obsolète compile), vous pouvez accéder InternalLibrarydans 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 implementationconfiguration a été introduite pour éviter cela. Alors maintenant, si vous utilisez implementationau lieu de apidans 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 MyLibraryet 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 compilepar le implementationmot - 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 apipour chaque dépendance qui est nécessaire pour l'API publique de votre bibliothèque, tandis que implementationpour 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