La compileparola chiave Gradle è stata deprecata a favore delle parole chiave apie implementationper configurare le dipendenze.
L'uso apiequivale all'utilizzo del deprecato compile, quindi se si sostituisce tutto compilecon apitutto funzionerà come sempre.
Per comprendere la implementationparola chiave, considerare il seguente esempio.
ESEMPIO
Supponiamo di avere una libreria chiamata MyLibraryche utilizza internamente un'altra libreria chiamata InternalLibrary. Qualcosa come questo:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
Supponiamo che la configurazione degli MyLibrary build.gradleusi sia così:apidependencies{}
dependencies {
api project(':InternalLibrary')
}
Vuoi usarlo MyLibrarynel tuo codice, quindi nella tua app build.gradleaggiungi questa dipendenza:
dependencies {
implementation project(':MyLibrary')
}
Utilizzando la apiconfigurazione (o obsoleto compile) è possibile accedere InternalLibrarynel codice dell'applicazione:
// 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());
In questo modo il modulo MyLibrarypotenzialmente "perde" l'implementazione interna di qualcosa. Non dovresti (essere in grado di) usarlo perché non è importato direttamente da te.
La implementationconfigurazione è stata introdotta per evitarlo. Quindi ora se usi implementationinvece di apiin MyLibrary:
dependencies {
implementation project(':InternalLibrary')
}
non potrai più chiamare InternalLibrary.giveMeAString()il codice della tua app.
Questo tipo di strategia di boxe consente al plug-in Android Gradle di sapere che se modifichi qualcosa InternalLibrary, deve solo innescare la ricompilazione MyLibrarye non la ricompilazione dell'intera app, perché non hai accesso InternalLibrary.
Quando si hanno molte dipendenze nidificate, questo meccanismo può accelerare molto la compilazione. (Guarda il video collegato alla fine per una piena comprensione di questo)
CONCLUSIONI
Quando passi al nuovo plug-in Android Gradle 3.XX, devi sostituire tutto compilecon la implementationparola chiave (1 *) . Quindi prova a compilare e testare la tua app. Se tutto va bene lascia il codice così com'è, se hai problemi probabilmente hai qualcosa di sbagliato nelle tue dipendenze o hai usato qualcosa che ora è privato e non più accessibile. Suggerimento dell'ingegnere del plugin Android Gradle Jerome Dochez (1 ) * )
Se sei un manutentore di librerie, dovresti utilizzarlo apiper ogni dipendenza necessaria per l'API pubblica della tua biblioteca, mentre utilizzalo implementationper testare dipendenze o dipendenze che non devono essere utilizzate dagli utenti finali.
Articolo utile In mostra la differenza tra implementazione e api
RIFERIMENTI
(Questo è lo stesso video suddiviso per risparmiare tempo)
Google I / O 2017 - Come velocizzare le build Gradle (FULL VIDEO)
Google I / O 2017 - Come accelerare la compilazione di Gradle (SOLO PARTE NEW PLADIN 3.0.0)
Google I / O 2017 - Come accelerare la costruzione di Gradle (riferimento a 1 * )
Documentazione Android