Question portée de dépendance apt dans Android gradle - à quoi sert-il?


Quelle est la portée 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 {
    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'
}

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 portée appropriée? Je ne connais que compile, package et scope fourni. compiler inclut la dépendance au moment de la compilation et dans votre package, à condition que le terme n'inclue que la bibliothèque au moment de la compilation et la supprime à temps de paquet donc ce n'est pas inclus dans la construction finale. et Package est l'inverse, il inclut la dépendance dans le package et non à la compilation. Mais qu'est-ce que la portée des dépendances aptes dont nous avons évidemment besoin le com.neenbedankt.android-apt pour que cela fonctionne alors je connais son android basé.

mettre à jour: pourquoi je ne peux pas utiliser à condition de portée de dépendance au lieu de apte portée ? Comment diffèrent-ils?

j'ai créé un tutoriel sur étendues de dépendance dague pour ceux qui ont besoin de plus d'informations.


40
2018-01-26 14:46


origine


Réponses:


Du android-apt page du projet:

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

  • 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 ressemble beaucoup à la provided portée, mais apt diffère de provided de quelques manières clés. La première différence est ce code généré par un apt la dépendance est disponible pour l'EDI, alors que le code généré par un provided la dépendance ne l'est pas.

Une autre différence importante est que le code dans une bibliothèque utilisant le provided la portée est sur le classpath IDE (c'est-à-dire que vous pouvez importer les classes et tenter de les utiliser), alors que le code dans un apt la dépendance ne l'est pas. Avec provided, votre code se bloquera à l'exécution si vous ne fournissez pas les dépendances référencées avec un compile contrepartie portée.

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

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 (que le provided la portée permettrait). Ainsi, le apt la portée est plus appropriée.

Mise à jour pour octobre 2016: Vous n'avez probablement pas besoin apt et le android-apt plugin plus. La version 2.2 du plugin Android Gradle a un annotationProcessor configuration que vous devriez utiliser à la place.

Voir plus à Quelle est la prochaine pour Android-apt?


66
2018-01-26 14:51



Juste pour ajouter comment changer cela dans Studio 2.2 +

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

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

Heureux codage :)


10
2017-11-26 11:06