¿Por qué Android cambia la tarea de compilación a la tarea de implementación en la compilación de gradle?
Como se ve en Android Studio 3.0 (canary 3.0), ahora agregamos depedencies
declarando implementation
tareas de implementation
lugar de compile
.
// Before compile 'com.android.support:appcompat-v7:25.3.1' // Currently implementation 'com.android.support:appcompat-v7:25.3.1'
Todavía podemos usar la tarea de compile
, pero me gustaría entender:
- Error: (81, 0) getMainOutputFile ya no es compatible. Utilice getOutputFileName si necesita determinar el nombre de archivo de la salida.
- Android Studio Preview 3.0 - Error en la instalación de la aplicación al ejecutar una aplicación instantánea
- Java.lang.NoSuchMethodError: Ningún método virtual keySet ()
- Android Studio 3.0 Canary 1 GRPC error
- Android studio 3.0 Canary 1: la actualización del proyecto ha fallado
- ¿Cuál es la diferencia entre la
implementation
y la tarea decompile
? - ¿Por qué Android gradle construir cambio para utilizar la
implementation
como predeterminado?
- Cómo utilizar Data Binding y Kotlin en Android Studio 3.0.0
- No se puede compilar en Android Studio 3.0 Canary 1
- Reemplace Retrolambda con Android Studio 3.0 Java 8 funciones integradas
- Android Room - consulta de selección simple - No se puede acceder a la base de datos en el hilo principal
- Android Studio 3.0: canary 6: android.content.res.Resources $ NotFoundException dentro de la actividad de lanzamiento
- El emulador de Android no puede acceder a Internet
- Dagger 2 con Android Studio 3.0 Preview (Canary 2) usando annotationProcessor en lugar de android-apt
- ConstraintLayout no funciona en el editor de GUI Android Studio 3.0 - Canary 4
Parece que compile
ha sido obsoleto y api
o implementation
debe ser utilizado en su lugar. Según The Java Library Plugin – Guía del usuario de Gradle Versión 3.5 :
La configuración de
compile
todavía existe, pero no debe utilizarse ya que no ofrecerá las garantías que proporcionan las configuraciones deapi
y deimplementation
.
Gracias a un enlace útil de @petter, me gustaría añadir un resumen.
Esto significa que la compilación de Android Gradle empieza a usar el complemento java-library
lugar del plugin java
anterior. Este plugin introduce el concepto de exposed API
con dos configuration
para declarar dependencias.
- Api
Debe utilizarse para declarar las dependencias que son exportadas por la biblioteca API
Por ejemplo, en un caso que está construyendo una biblioteca de Java (o Android) que es utilizada por otras aplicaciones. Si utiliza cualquier biblioteca de terceros y desea exponer su API al consumidor de su biblioteca también, debe declarar así.
api 'commons-httpclient:commons-httpclient:3.1'
- implementación
Debe utilizarse para declarar las dependencias que son internas al componente.
Al desarrollar la aplicación para Android, nuestro módulo de app
es el punto final que no necesita exponer ninguna parte externa. implementation
.
implementation 'org.apache.commons:commons-lang3:3.5'
Antes de que la compile
funcione como la misma api
, los beneficios de la implementation
son:
- Las dependencias no se filtran en el classpath de compilación de los consumidores, por lo que nunca dependerá de una dependencia transitiva
- Una compilación más rápida gracias al tamaño reducido de classpath
- Menos recompilaciones cuando las dependencias de implementación cambian: los consumidores no tendrían que ser recompilados
- Cleaner publishing: cuando se utiliza junto con el nuevo complemento maven-publish, las librerías Java producen archivos POM que
Distinguir exactamente entre lo que se requiere para compilar
Biblioteca y lo que se requiere para usar la biblioteca en tiempo de ejecución (en otras palabras, no mezcle lo que se necesita para compilar la propia biblioteca y
Lo que se necesita para compilar contra la biblioteca).
- DB de SQLite accedido desde múltiples subprocesos
- Creación de un archivo pdf en android mediante programación y escritura en él