La compile
parola chiave Gradle è stata deprecata a favore delle parole chiave api
e implementation
per configurare le dipendenze.
L'uso api
equivale all'utilizzo del deprecato compile
, quindi se si sostituisce tutto compile
con api
tutto funzionerà come sempre.
Per comprendere la implementation
parola chiave, considerare il seguente esempio.
ESEMPIO
Supponiamo di avere una libreria chiamata MyLibrary
che 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.gradle
usi sia così:api
dependencies{}
dependencies {
api project(':InternalLibrary')
}
Vuoi usarlo MyLibrary
nel tuo codice, quindi nella tua app build.gradle
aggiungi questa dipendenza:
dependencies {
implementation project(':MyLibrary')
}
Utilizzando la api
configurazione (o obsoleto compile
) è possibile accedere InternalLibrary
nel 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 MyLibrary
potenzialmente "perde" l'implementazione interna di qualcosa. Non dovresti (essere in grado di) usarlo perché non è importato direttamente da te.
La implementation
configurazione è stata introdotta per evitarlo. Quindi ora se usi implementation
invece di api
in 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 MyLibrary
e 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 compile
con la implementation
parola 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 api
per ogni dipendenza necessaria per l'API pubblica della tua biblioteca, mentre utilizzalo implementation
per 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