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í?
- Proguard - también utiliza archivos proguard de los módulos
- Android Studio 0.4 Archivos duplicados copiados en APK META-INF / LICENSE.txt
- Gradle Error: Error de ejecución para la tarea ': app: processDebugGoogleServices'
- Estudio Android - lanzamiento de APK para el sabor
- Cómo cambiar el nombre del paquete de la aplicación de Android al ensamblar con Gradle?
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.
- Error de dependencia al utilizar una biblioteca aar
- Cobertura de código en android studio 1.2 para pruebas instrumentadas
- Generar proyecto eclipse desde el complemento androide gradle
- Spoon JAR para pruebas locales
- Android Studio 0.4. + Almacén de claves de depuración personalizado
- Android Studio 1.0.2 m2responsory gradle issue
- Gradle build falló en Android Studio versiones nuevas y viejas en OSX
- No se pueden ejecutar pruebas unitarias en Android Studio
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
- Añadir pestaña dentro de Fragmento ¿En Android?
- ¿Es seguro guardar el contexto de la aplicación en una variable estática en Android?