J'ai ajouté une nouvelle interface Retrofit à mon projet contenant quelques Endpoints annotés avec les annotations @GET
et @HEADERS
, après avoir injecté ladite interface dans une classe de référentiel en utilisant l'annotation @Inject
dans le constructeur de ladite classe, Android Studio renvoie cette erreur:
@error.NonExistentClass()
Après avoir regardé le code Java généré, il remplace le @GET
et @HEADERS
annotations avec ceci:
NonExistentClass cannot be converted to Annotation
J'ai déjà essayé ce qui suit:
Utilisation de annotatioProcessor
au lieu de kapt
Définition de jetifier.enabled
sur false
dans gradle.properties
Définition de generateStubs
sur true
dans mon fichier build.gradle
Définition de correctErrorTypes
sur true
dans mon fichier build.gradle
J'utilise:
Android Studio 3.3
Kotlin 1.3.11
Dague 2.21
Rénovation 2.3.0
Kotlin
Kapt
Serait-ce un problème de portée de poignard? ou Retrofit / dagger pas entièrement compatible avec les nouvelles versions du plugin Kapt?
3 Réponses :
Heureusement, cette question m'a amené à comprendre mon problème. En déplaçant les classes d'un module d'application vers une bibliothèque, je faisais référence à une classe d'annotation qui n'existait que dans un dossier de débogage. Donc, les versions de débogage étaient bien, mais les appels à gradlew install
ont échoué lors de la génération des fichiers de version.
L'erreur pour moi était très explicite même si cela m'a pris beaucoup de temps à réaliser - le fichier généré avait littéralement remplacé l'annotation manquante par @error.NonExistentClass()
Déplacer le fichier dans l'ensemble src principal signifiait que les versions de débogage et de publication pouvaient voir la classe. Ce qui m'a pris du temps à comprendre, c'est que je supposais que c'était un problème de Dagger masqué par kapt, mais en réalité c'était juste un vieux problème de Dagger. Mon conseil est de regarder attentivement la configuration de votre Dagger.
Je pense que l'astuce ici est que si vous dépendiez d'un module qui dépendait d'un autre module / bibliothèque (par exemple Retrofit) mais que vous définissez Retrofit comme une dépendance implémentation
au lieu de api < / code>, alors votre module ne le verrait pas de manière transitoire et
kapt
échouerait.
Pour moi, j'ai récemment supprimé la dague d'un projet et j'ai oublié de supprimer les annotations @Singleton et @Inject des classes concernées.
Pour moi, il supprime péniblement tous les @Singleton et @OpenForTesting sur mes classes Module. Et en supprimant deux classes DAO et un référentiel dont les classes de modèle de support ne sont plus annotées avec @Entity.
Pouvez-vous montrer du code?
J'ai trouvé la solution, mon projet est multi-module et le module
remote
contenait la dépendanceretrofit
, pour une raison quelconque, l'EDI permet d'accéder auremote code> dépendances du module du module
app
, l'ajout des dépendancesretrofit
sur le module a résolu le problèmeMerci @AlfredoBejarano J'ai compris mon problème, cela m'a pris plus de temps que je ne le pensais, mais l'erreur pour moi était en fait très explicite. J'ajouterai une réponse qui pourrait aider les autres.