Traitement des annotations avec Kapt et Gradle

KOTLIN!! Googlec’est ce que tous les Google criaient collectivement aux développeurs Android lors de la conférence I / O de cette année. Et c’est génial — Kotlin est une langue complète avec un excellent support ID qui rend l’écriture d’applications Android beaucoup plus facile et plus rapide. Kotlin est cependant encore très nouveau, avec la version 1.0 sortie en février de l’année dernière. Et comme pour tout ce qui est nouveau, tout ne fonctionne pas tout à fait.

Une chose qui a été douloureuse pendant un certain temps, mais qui commence à devenir plus facile, est d’utiliser Kotlin avec des processeurs d’annotation. Mais même avec beaucoup de problèmes fonctionnels résolus, il n’y a pas une tonne de documentation sur la façon dont toutes les pièces vont ensemble, alors parcourons-la.

Nous allons supposer que vous connaissez déjà le sujet des processeurs d’annotation Java. Dans cet esprit, il n’y a vraiment que quelques différences.

Kapt est l’outil de traitement des annotations Kotlin, et il est en assez bon état ces jours-ci. Si vous voulez pouvoir référencer le code généré à partir de Kotlin, vous devez utiliser kapt. Pour ce faire, incluez simplement le plugin dans votre build.fichier gradle avec la ligne:

apply plugin: 'kotlin-kapt'

Et là où vous utiliseriez normalement le mot-clé annotationProcessor pour spécifier votre dépendance au processeur, utilisez plutôt le mot-clé kapt.

C’est tout. Tu as fini.

Pas tout à fait

Ok, vous avez presque terminé. La question suivante et la plus intéressante est la suivante: comment déboguer un processeur d’annotation compilé avec kapt?

Si vous venez de Java, vous êtes peut-être familier avec le débogage d’un processeur d’annotation en exécutant javac à partir de la ligne de commande, puis en y attachant le débogueur. Mais kapt n’utilise pas javac pour compiler, il utilise kotlinc. Ainsi, les instructions de débogage d’un processeur d’annotation de la manière normale doivent être très légèrement modifiées pour kapt, de deux manières:

  1. La commande que nous voulons exécuter est maintenant:
./gradlew :app:clean :app:compileDebugKotlin --no-daemon -Dorg.gradle.debug=true -Dkotlin.compiler.execution.strategy="in-process" -Dkotlin.daemon.jvm.options="-Xdebug,-Xrunjdwp:transport=dt_socket\,address=5005\,server=y\,suspend=n"

Remarque: La commande ci-dessus a été modifiée à partir de l’histoire originale en raison d’un commentaire sur ce stackoverflow. La nouvelle commande vous permet d’attacher le débogueur à tout moment, plutôt que d’attendre le début de l’étape kapt et de vous forcer à essayer de l’attraper. Résumé – utilisez cette nouvelle commande, c’est bien mieux.

2.Nous devons attendre que la tâche de compilation Kotlin commence avant d’attacher le débogueur. Vous souhaitez donc surveiller votre build et rechercher la tâche:

:app:kaptDebugKotlin

Et quand vous le voyez, dirigez-vous immédiatement vers votreE et cliquez sur déboguer sur votre configuration distante. D’après mon expérience, si vous ne vous attachez pas à temps, la tâche continuera. Vous avez quelques secondes pour le comprendre, mais c’est un peu une course pour que tout fonctionne.
EDIT: Ce qui précède ^ n’est plus le cas! Avec la nouvelle commande gradle, vous pouvez attacher le débogueur à tout moment et il devrait atteindre des points d’arrêt dans votre classe de processeur. Ouah ! La seule mise en garde est que parfois le débogueur se bloque à d’autres points de la construction, il suffit de redémarrer ou de rattacher le débogage, et vous serez prêt à partir.

Donc c’est vraiment ça. Vous pouvez maintenant créer, exécuter et déboguer votre processeur d’annotation avec kapt. Heureux Kotlin-ing.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.