scope de dépendance apt dans Android gradle – à quoi sert-il?

Quelle est la scope de dépendances apt dans les fichiers de graduation Android que je vois parfois?

Un exemple ressemble à ça?

apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' android { comstackSdkVersion 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 { comstack "com.google.dagger:dagger:${DAGGER_VERSION}" apt "com.google.dagger:dagger-comstackr:${DAGGER_VERSION}"//what is this scope provided 'org.glassfish:javax.annotation:10.0-b28' } 

et dans le fichier build.gradle de niveau supérieur, il a cette dépendance globale:

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

Notez que dans la section dépendances il y a une scope appropriée? Je ne connais que comstack, package et scope fourni. comstack inclut la dépendance au moment de la compilation et dans votre paquet, à condition que le terme n’inclue que la bibliothèque au moment de la compilation et le supprime au moment du paquet afin qu’il ne soit pas inclus dans la version finale. et Package est l’inverse, il inclut la dépendance dans le package et non à la compilation. Mais qu’est-ce que la scope des dépendances aptes dont nous avons évidemment besoin le com.neenbedankt.android-apt pour que cela fonctionne alors je connais son android basé.

update: pourquoi je ne peux pas utiliser la scope de dépendance fournie au lieu de la scope d’ apt ? Comment diffèrent-ils?

J’ai créé un tutoriel sur les étendues de dépendance à la dague pour ceux qui ont besoin de plus d’informations.

De la page du projet android-apt :

Le plugin android-apt aide à travailler avec les processeurs d’annotation en combinaison avec Android Studio. Il a deux objectives:

  • Permet de configurer un processeur d’annotations uniquement en temps de compilation en tant que dépendance, sans inclure l’artefact dans l’APK ou la bibliothèque finale

  • Configurez les chemins source afin que le code généré à partir du processeur d’annotations soit correctement capté par Android Studio.

Vous utilisez Dagger, qui utilise le traitement des annotations pour générer du code. Le code de traitement des annotations ne doit pas être inclus dans l’APK final et vous souhaitez que le code généré soit visible pour Android Studio. android-apt active ce comportement.

Cela semble très similaire à la scope provided , mais apt diffère de quelques manières essentielles. La première différence est que le code généré par une dépendance apt est disponible pour l’EDI, tandis que le code généré par une dépendance provided ne l’est pas.

Une autre différence importante est que le code dans une bibliothèque utilisant l’étendue provided trouve sur le classpath IDE (c’est-à-dire que vous pouvez importer les classes et tenter de les utiliser), contrairement au code dans une dépendance apt . Avec provided , votre code se bloquera à l’exécution si vous ne fournissez pas réellement les dépendances référencées avec un homologue de scope comstack .

Vous pouvez trouver une discussion sur apt vs provided sur ce problème android-apt .

Dans le cas de Dagger, il ne devrait y avoir aucune raison d’inclure le processeur d’annotation et le générateur de code dans aucun de vos codes (ce que permettrait l’étendue provided ). La scope d’ apt est donc plus appropriée.

Mise à jour pour octobre 2016: Vous n’avez probablement plus besoin d’ apt et du plugin android-apt . La version 2.2 du plug-in Android Gradle a une configuration d’ annotationProcessor que vous devriez utiliser à la place.

Voir plus à la prochaine pour Android-apt?

Juste pour append comment changer cela dans Studio 2.2 +

 dependencies { comstack 'com.google.dagger:dagger:2.4' annotationProcessor "com.google.dagger:dagger-comstackr:2.4" } 

Ajoutez ceci dans le module de gradation d’applications. Pas besoin de changer autre chose.

Heureux codage 🙂