KOTLIN!! … ist, was alle von Google wurde gemeinsam an Android-Entwickler auf der diesjährigen I / O-Konferenz schreien. Und das ist großartig — Kotlin ist eine voll funktionsfähige Sprache mit großartiger IDE-Unterstützung, die das Schreiben von Android-Apps viel einfacher und schneller macht. Kotlin ist jedoch noch sehr neu, da Version 1.0 erst im Februar letzten Jahres veröffentlicht wurde. Und wie bei allem, was neu ist, funktioniert nicht alles ganz.
Eine Sache, die seit einiger Zeit schmerzhaft ist, aber allmählich einfacher wird, ist die Verwendung von Kotlin mit Annotationsprozessoren. Aber selbst wenn viele der funktionalen Probleme gelöst sind, gibt es nicht viel Dokumentation darüber, wie alle Teile zusammenpassen.
Wir gehen davon aus, dass Sie bereits mit dem Thema Java Annotation Processors vertraut sind. In diesem Sinne gibt es wirklich nur wenige Unterschiede.
Kapt ist das Kotlin Annotation Processing Tool, und es ist in ziemlich guter Form in diesen Tagen. Wenn Sie in der Lage sein möchten, auf generierten Code aus Kotlin zu verweisen, müssen Sie kapt verwenden. Fügen Sie dazu einfach das Plugin in Ihren Build ein.gradle-Datei mit der Zeile:
apply plugin: 'kotlin-kapt'
Und wo Sie normalerweise das Schlüsselwort annotationProcessor verwenden würden, um Ihre Prozessorabhängigkeit anzugeben, verwenden Sie stattdessen das Schlüsselwort kapt .
Das war’s. Du bist fertig.
Nicht ganz
Ok, du bist fast fertig. Die nächste und interessanteste Frage ist, wie debuggen Sie einen Annotationsprozessor, der mit kapt kompiliert wurde?
Wenn Sie aus Java kommen, sind Sie möglicherweise mit dem Debuggen eines Annotationsprozessors vertraut, indem Sie javac über die Befehlszeile ausführen und dann den Debugger daran anhängen. Aber kapt verwendet Javac nicht zum Kompilieren, sondern kotlinc. Daher müssen die Anweisungen zum normalen Debuggen eines Annotationsprozessors für kapt auf zwei Arten geringfügig geändert werden:
- Der Befehl, den wir ausführen möchten, lautet jetzt:
./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"
Hinweis: Der obige Befehl wurde aufgrund eines Kommentars zu diesem Stackoverflow aus der ursprünglichen Story bearbeitet. Mit dem neuen Befehl können Sie den Debugger jederzeit anhängen, anstatt auf den Beginn des Kapt-Schritts zu warten und Sie zu zwingen, ihn zu „fangen“. Zusammenfassung – Verwenden Sie diesen neuen Befehl, es ist viel besser.
2.Wir müssen warten, bis die Kotlin-Kompilierungsaufgabe beginnt, bevor wir den Debugger anhängen. Sie möchten also Ihren Build überwachen und nach der Aufgabe suchen:
:app:kaptDebugKotlin
Und wenn Sie es sehen, gehen Sie sofort zu Ihrer IDE und klicken Sie auf Debug in Ihrer Remote-Konfiguration. Nach meiner Erfahrung, wenn Sie nicht rechtzeitig anhängen, wird die Aufgabe einfach weitergehen. Sie haben ein paar Sekunden, um es herauszufinden, aber es ist ein bisschen ein Rennen, um alles zum Laufen zu bringen.
EDIT: Das obige ^ ist nicht mehr der Fall! Mit dem neuen Befehl gradle können Sie den Debugger jederzeit anhängen und er sollte Haltepunkte in Ihrer Prozessorklasse erreichen. Juhu! Die einzige Einschränkung ist, dass manchmal der Debugger an anderen Stellen im Build hängen bleibt, einfach neu starten oder das Debugging erneut anbringen, und Sie können loslegen.
Das ist es also wirklich. Jetzt können Sie Ihren Annotationsprozessor mit kapt erstellen, ausführen und debuggen. Glücklicher Kotlin-ing.