para - gradle version android studio
Implementación de Android Gradle frente a CompileOnly Performance (1)
Los documentos mencionan que la implementation
proporciona mejoras significativas en el tiempo de compile
sobre compile
/ api
. ¿Qué pasa con compileOnly
?
Mi caso de uso es un proyecto de múltiples módulos (lo siento, no me gusta la terminología de múltiples proyectos de Gradle), donde tengo una aplicación de Android y varias bibliotecas de las que depende la aplicación ( implementation
). Algunas de las bibliotecas también dependen unas de otras. ¿Debería usar la implementation
o compileOnly
cuando declare dependencias en los módulos de la biblioteca? Mi módulo de aplicación utilizará la implementation
para depender de esos artefactos, por lo que no los necesito para que sean transitivos a través de los módulos de la biblioteca.
La configuración de api
debe usarse para dependencias que se exportan a modules
externos (dependencia transitiva) . La configuración de implementation
Vice-Versa se debe usar para las dependencias que son internas al componente (no para la dependencia transitiva) .
implementación vs compilación solo :
No hay similitud en su trabajo, solo compileOnly
- una configuración heredada de java-plugin
- requerido en tiempo de compilación
- tampoco está incluido en el classpath en tiempo de ejecución ni está expuesto a proyectos dependientes.
Entonces compileOnly
no reemplaza el trabajo de configuración de implementation
, por ejemplo:
implementation ''com.android.support:appcompat-v7:25.1.0'' // can''t use compileOnly here
testCompile ''junit:junit:4.12''
compile "com.google.dagger:dagger:2.8" // can''t use here also
annotationProcessor "com.google.dagger:dagger-compiler:2.8" // can''t use here also
compileOnly ''javax.annotation:jsr250-api:1.0'' // we can use compileOnly here because it''s required on run time only.
Como su caso es un "multi-módulo", debe usar la configuración de api
, hasta que llegue al módulo final, es mejor usar la implementation
.
El siguiente gráfico describe esas configuraciones:
¿Actuación?
Creo que la api
requiere más memoria porque gradle tomará una instantánea de cada clase en ese módulo transitivo , viceversa la implementation
es una configuración preferida porque (como se mencionó anteriormente) se usa para sus propias implementaciones internas.