Annotatieverwerking met Kapt en Gradle

KOTLIN!! … is wat alle van Google was collectief schreeuwen tegen Android-ontwikkelaars op de I/O conferentie van dit jaar. En dat is geweldig — Kotlin is een volledig uitgeruste taal met geweldige IDE-ondersteuning die het schrijven van Android-apps een deurklink van een stuk gemakkelijker en sneller maakt. Kotlin is echter nog steeds zeer nieuw, met Versie 1.0 uitgebracht in februari van vorig jaar. En zoals met alles wat zo nieuw is, werkt niet alles helemaal.

een ding dat een tijdje pijnlijk is geweest, maar het begint gemakkelijker te worden, is het gebruik van Kotlin met annotatieprocessors. Maar zelfs met veel van de functionele problemen uitgewerkt, is er niet een ton van de documentatie over hoe alle stukken samen te gaan, dus laten we lopen door het.

we gaan ervan uit dat u al vertrouwd bent met het onderwerp Java annotatie processors. Met dat in het achterhoofd zijn er eigenlijk maar een paar verschillen.

Kapt is de Kotlin Annotation Processing Tool, en het is in vrij goede staat deze dagen. Als je gegenereerde code van Kotlin wilt kunnen refereren, moet je kapt gebruiken. Om dat te doen, gewoon de plugin in uw build.gradle bestand met de regel:

apply plugin: 'kotlin-kapt'

en waar je normaal gesproken het sleutelwoord annotationProcessor gebruikt om je processorafhankelijkheid op te geven, gebruik je in plaats daarvan het sleutelwoord kapt.

dat is het. Je bent klaar.

niet helemaal

Ok, je bent bijna klaar. De volgende, en meest interessante vraag is, hoe debugg je een annotatie processor die is gecompileerd met kapt?

als u van java komt, bent u misschien bekend met het debuggen van een annotatieprocessor door javac vanaf de opdrachtregel uit te voeren en vervolgens de debugger eraan te koppelen. Maar kapt Gebruikt geen javac om te compileren, maar kotlinc. Dus de instructies voor het debuggen van een annotatie processor op de normale manier moeten zeer lichtjes worden aangepast voor kapt, op twee manieren:

  1. het commando dat we willen uitvoeren is nu:
./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"

opmerking: het bovenstaande commando is bewerkt vanuit het originele verhaal vanwege een commentaar op deze stackoverflow. Het nieuwe commando stelt u in staat om de debugger op elk gewenst moment aan te sluiten, in plaats van te wachten tot de kapt stap begint en u te dwingen om te proberen en te “vangen”. Samenvatting-gebruik dit nieuwe commando, het is veel beter.

2.We moeten wachten tot de Kotlin compilatietaak begint voordat we de debugger aankoppelen. Dus u wilt uw build te controleren en op zoek naar de taak:

:app:kaptDebugKotlin

en als je het ziet, ga dan onmiddellijk naar je IDE en druk op debug op je externe configuratie. In mijn ervaring, als je niet op tijd hecht, zal de taak gewoon verder gaan. Je hebt een paar seconden om het uit te zoeken, maar het is een beetje een race om het allemaal aan de praat te krijgen.
bewerken: bovenstaande ^ is niet langer het geval! Met het nieuwe gradle Commando kunt u de debugger op elk gewenst moment koppelen, en het zou breekpunten in uw processorklasse moeten raken. Yay! Het enige voorbehoud is dat soms de debugger zal hangen op andere punten in de build, gewoon herstarten of opnieuw koppelen debugging, en je zult goed om te gaan.

dus dat is het echt. Nu kunt u uw annotatieprocessor bouwen, uitvoeren en debuggen met kapt. Fijne Kotlin-ing.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.