Accélérez la vitesse de compilation de Kotlin: Migrez de KAPT à KSP

Gabriel TEKOMBO
AndroidMood
Published in
4 min readApr 26, 2022
Coding by Markus Spiske

La vitesse de compilation est et reste une des préoccupations principales des développeurs Android soucieux de performances et d’efficacité, mais cela n’est pas toujours évident lorsqu’on est face à un projet qui nécessite une énorme quantité de temps pour se lancer, chose qui arrive très souvent. Fort de ce constat, Google a décidé de concevoir KSP (Kotlin Symbol Processing) dans le but de palier aux problèmes de lenteur du KAPT (Kotlin Annotation Processing Tool) et à focaliser son axe de développement sur Kotlin. De ce fait, KSP s’inscrit désormais comme le plugin par excellence de processeur d’annotations préconisé pour améliorer les performances de compilation des applications Android. Cela nous amène à nous poser deux questions: “Pourquoi KSP est plus rapide que son prédécesseur?” et “comment migrer de KAPT à KSP?”. Questions auxquelles nous aurons le plaisir de répondre dans cet article.

1. Kezako ?

Kotlin Symbol Processing (KSP) est une bibliothèque développée par Google, qui fournit une API permettant de créer des compilateurs légers. KSP met à la disposition des développeurs une API de plugin de compilateur simplifiée qui exploite la puissance de Kotlin tout en minimisant la courbe d’apprentissage. Son rôle est simple, permettre aux développeurs Kotlin de créer leur propre processeur pour le traitement des symboles ou intégrer ses annotations afin de garantir une augmentation de la vitesse de compilation de son application allant jusqu’à 2 fois plus vite. Nous n’entrerons pas dans les details de création des processeurs d’annotation mais si cela vous intéresse, voici un article qui vous permettra de créer vos propres plugins KSP.

Voici comment KSP navigue entre les fichiers et le code source et la structure d’un programme.

2. Pourquoi utiliser KSP ?

Langage idiomatique

L’API KSP traite les programmes Kotlin de manière idiomatique. KSP comprend les fonctionnalités spécifiques à Kotlin, telles que les fonctions d’extension, la variance site-déclaration et les fonctions locales. Il modélise également les types de manière explicite et fournit une vérification de type de base, telle que l’équivalence et la compatibilité d’affectation.

Multiplateforme

Etant donné que KSP n’est pas lié à JVM, il est tres facilement portable et peut être utilisé pour des environnements non-Android et non-JVM comme Kotlin/Native et Kotlin/JS.

Performances

KSP améliore considérablement la vitesse de build du code Kotlin (jusqu’à 2 fois plus rapide pour Room).

Comparativement, KAPT n’a pas de processeur d’annotation spécial si ce n’est celui de Java, il doit être implémenté avec APT (Android Performance Tuner), qui devra compiler le code Kotlin et générer un stub analysable APT (code Java consommé par l’API javax.lang.model du processeur Java), ce qui ralentit la vitesse de compilation globale de Kotlin car cela demande plus de temps de traitement; ce qui n’est pas le cas de KSP car il est basé sur Kotlin Compiler Plugin (KCP) et peut donc ignorer cette étape car ayant une approche Kotlin-first tout en permettant le traitement des fichiers Java.

KSP vs KAPT (Zack Sweers)

3. Migration de KAPT à KSP

Migrer de KAPT à KSP est très simple, il vous suffira d’intégrer le plugin dans votre build.gradle, et ensuite de remplacer les annotations kapt de votre module de dépendances par ksp.

Ci dessous un exemple d’implémentation de KSP avec la librairie Room.

Integration du plugin KSP pour Room avec Groovy

Hop ! Tout est okay !

Par défaut, le code généré automatiquement après le build se trouve dans les arborescences suivantes:

build/generated/ksp/main/kotlin/
build/generated/ksp/main/java/

4. Librairies supportées

Au moment où est publié cet article, voici l’état des lieux des librairies qui bénéficient ou devront bénéficier d’un support KSP:

  • Officiellement supportées: Room, Moshi, RxHttp, Kotshi, Lyricist, Lich SavedState, gRPC Dekorator, EasyAdapter, DeeplinkDispatch
  • Pas encore supportées : Auto Factory, Dagger, Hilt, Glide
  • En cours : Micronaut

Google met clairement les choses en marche depuis des années afin de démocratiser Kotlin sur toutes strates de développement Android, ce n’est donc pas surprenant de constater que ksp a été conçu dans le but de remplacer kapt comme processeur d’annotations pour les années à venir, cela reflète une vision orientée Kotlin-first qui continue de se developper au détriment de Java, qui peu à peu se retrouve totalement relayé au second plan.

Si vous êtes intéressé par un article qui parcoure en profondeur la création et le fonctionnement des processeurs d’annotations KSP, signalez vous en commentaire.

N’hésitez pas à laisser quelques applaudissements 👏👏👏 pour soutenir. Merci pour votre attention

Références utiles

--

--

Gabriel TEKOMBO
AndroidMood

Android Engineer 📱. I write about Kotlin, Jetpack, best practices, engineering processes for mobile apps. — gabrielthecode.com