La compile
palabra clave Gradle quedó en desuso a favor de las palabras clave api
y implementation
para configurar las dependencias.
Usar api
es el equivalente a usar lo obsoleto compile
, por lo que si reemplazas todo compile
con api
todo funcionará como siempre.
Para comprender la implementation
palabra clave, considere el siguiente ejemplo.
EJEMPLO
Supongamos que tiene una biblioteca llamada MyLibrary
que 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.gradle
usos es así:api
dependencies{}
dependencies {
api project(':InternalLibrary')
}
Desea usar MyLibrary
en su código para que en su aplicación build.gradle
agregue esta dependencia:
dependencies {
implementation project(':MyLibrary')
}
Usando la api
configuración (o en desuso compile
) puede acceder InternalLibrary
en 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 MyLibrary
está potencialmente "filtrando" la implementación interna de algo. No deberías (poder) usar eso porque no lo has importado directamente.
La implementation
configuración se introdujo para evitar esto. Entonces, si usa en implementation
lugar de api
en 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 MyLibrary
y 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 compile
con la implementation
palabra 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 api
para cada dependencia que sea necesaria para la API pública de su biblioteca, mientras lo usa implementation
para 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