Apt dependencia alcance en Android gradle – ¿para qué se utiliza?

¿Cuál es el alcance de la dependencia apt en los archivos de gradle android que veo a veces?

Un ejemplo se ve así?

apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' android { compileSdkVersion 20 buildToolsVersion '20.0.0' defaultConfig { applicationId "org.ligboy.test.card.module1" minSdkVersion 14 targetSdkVersion 20 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } final DAGGER_VERSION = '2.0.2' dependencies { compile "com.google.dagger:dagger:${DAGGER_VERSION}" apt "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"//what is this scope provided 'org.glassfish:javax.annotation:10.0-b28' } 

Y en el archivo build.gradle de nivel superior tiene esta dependencia global:

 buildscript { dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' } } 

Aviso en la sección de dependencias hay un alcance apt? Sólo sé de compilación, paquete y alcance proporcionado. Compile incluye la dependencia en tiempo de compilación y en su paquete, siempre que se dice sólo incluir la biblioteca en tiempo de compilación y descartarlo en tiempo de paquete por lo que no está incluido en la compilación final. Y el paquete es el inverso, que incluye la dependencia en el paquete y no en tiempo de compilación. Pero cuál es el alcance apto de la dependencia que obviamente necesitamos el com.neenbedankt.android-apt para él trabajar así que sé su androide basado.

Actualización: ¿por qué no puedo utilizar el ámbito de dependencia proporcionado en lugar de apt alcance? ¿Cómo difieren?

I creado un tutorial sobre dagger dependencia ámbitos para aquellos que necesitan más información.

Desde la página del proyecto android-apt :

El complemento androide-apt ayuda a trabajar con procesadores de anotación en combinación con Android Studio. Tiene dos propósitos:

  • Permitir configurar un procesador de anotación de anotación de compilación como dependencia, sin incluir el artefacto en el APK o biblioteca final

  • Configure las rutas de origen para que el código que se genera desde el procesador de anotaciones se recoja correctamente en Android Studio.

Está utilizando Dagger, que utiliza el procesamiento de anotaciones para generar código. El código de procesamiento de anotaciones no se debe incluir en el APK final y desea que el código generado sea visible para Android Studio. android-apt permite este comportamiento.

Esto suena muy similar al alcance provided , pero apt difiere de provided de algunas maneras claves. La primera diferencia es que el código generado por una dependencia apt está disponible para el IDE, mientras que el código generado por una dependencia provided no lo es.

Otra diferencia importante es que el código en una biblioteca que utiliza el ámbito provided está en el classpath IDE (es decir, puede importar las clases e intentar utilizarlas), mientras que el código en una dependencia apt no lo es. Con lo provided , su código se bloqueará en tiempo de ejecución si en realidad no proporciona las dependencias referenciadas con una contrapartida de compile alcance.

Puedes encontrar una discusión acerca de apt vs provided en este problema de android-apt .

En el caso de Dagger, no debería haber ninguna razón para incluir el procesador de anotación y el generador de código en cualquiera de su código (lo que permitiría el alcance provided ). Por lo tanto, el alcance apt es más apropiado.

Actualización para octubre de 2016: Probablemente no necesite apt y el complemento de android-apt . La versión 2.2 del complemento Android Gradle tiene una configuración de annotationProcessor que deberías usar en su lugar.

Ver más en ¿Qué sigue para android-apt?

Sólo para añadir cómo cambiar esto en Studio 2.2 +

 dependencies { compile 'com.google.dagger:dagger:2.4' annotationProcessor "com.google.dagger:dagger-compiler:2.4" } 

Añada esto en el módulo de aplicaciones gradle. No hay necesidad de cambiar ninguna otra cosa.

Feliz codificación

  • Gradle assembleDebug y preDexDebug fallan incluso para nuevo proyecto
  • Importar el proyecto de Android Studio desde otro PC con diferentes versiones de Gradle?
  • La importación de la red Espresso causa duplicateFileException
  • Reemplace dinámicamente applicationId en el archivo_paths.xml
  • Ejecutar pelusa al construir proyectos de estudio de android
  • Migración de Eclipse a Android Studio Error El contenido no está permitido en prolog
  • Android Studio Gradle androidTest vs instrumentTest
  • NoSuchMethodError si estoy usando okhttp 2.0 y la última actualización?
  • Copiar archivos antes de resolver dependencias para crear una aplicación de Android
  • ¿Cómo excluir la carpeta res de los desarrolladores de gradle build?
  • Android Gradle Unit Prueba de migración de JARs - duplicar los archivos hamcrest de junit y mockito
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.