La compilepalabra clave Gradle quedó en desuso a favor de las palabras clave apiy implementationpara configurar las dependencias.
Usar apies el equivalente a usar lo obsoleto compile, por lo que si reemplazas todo compilecon apitodo funcionará como siempre.
Para comprender la implementationpalabra clave, considere el siguiente ejemplo.
EJEMPLO
Supongamos que tiene una biblioteca llamada MyLibraryque usa internamente otra biblioteca llamada InternalLibrary. Algo como esto:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
Supongamos que la configuración de MyLibrary build.gradleusos es así:apidependencies{}
dependencies {
api project(':InternalLibrary')
}
Desea usar MyLibraryen su código para que en su aplicación build.gradleagregue esta dependencia:
dependencies {
implementation project(':MyLibrary')
}
Usando la apiconfiguración (o en desuso compile) puede acceder InternalLibraryen su código de aplicación:
// 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 esta manera, el módulo MyLibraryestá potencialmente "filtrando" la implementación interna de algo. No deberías (poder) usar eso porque no lo has importado directamente.
La implementationconfiguración se introdujo para evitar esto. Entonces, si usa en implementationlugar de apien MyLibrary:
dependencies {
implementation project(':InternalLibrary')
}
ya no podrá llamar InternalLibrary.giveMeAString()a su código de aplicación.
Este tipo de estrategia de boxeo le permite al complemento Android Gradle saber que si edita algo InternalLibrary, solo debe activar la recompilación MyLibraryy no la recompilación de toda su aplicación, porque no tiene acceso a ella InternalLibrary.
Cuando tiene muchas dependencias anidadas, este mecanismo puede acelerar mucho la compilación. (Mire el video vinculado al final para obtener una comprensión completa de esto)
CONCLUSIONES
Cuando cambie al nuevo complemento Android Gradle 3.XX, debe reemplazar todo compilecon la implementationpalabra clave (1 *) . Luego intente compilar y probar su aplicación. Si todo está bien, deje el código como está, si tiene problemas, probablemente tenga algo mal con sus dependencias o haya utilizado algo que ahora es privado y no más accesible. Sugerencia del ingeniero del complemento Android Gradle Jerome Dochez (1 ) * )
Si usted es un mantenedor de la biblioteca, debe usarlo apipara cada dependencia que sea necesaria para la API pública de su biblioteca, mientras lo usa implementationpara probar dependencias o dependencias que no deben ser utilizadas por los usuarios finales.
Artículo útil que muestra la diferencia entre la implementación y la API
REFERENCIAS
(Este es el mismo video dividido para ahorrar tiempo)
Google I / O 2017: cómo acelerar las compilaciones de Gradle (VIDEO COMPLETO)
Google I / O 2017 - Cómo acelerar las compilaciones de Gradle (NUEVA PARTE GRADLE PLUGIN 3.0.0 SOLAMENTE)
Google I / O 2017: cómo acelerar las compilaciones de Gradle (referencia a 1 * )
Documentación de Android