Migrazione da kapt a KSP

Kapt (Kotlin Annotation Processing Tool) consente di utilizzare i processori di annotazioni Java con il codice Kotlin, anche se questi processori non dispongono di un supporto specifico per Kotlin. A questo scopo, vengono generati stub Java dai file Kotlin che i processori possono poi leggere. La generazione di stub è un'operazione dispendiosa e ha un impatto significativo sulla velocità di build.

KSP (Kotlin Symbol Processing) è un'alternativa a kapt incentrata su Kotlin. KSP analizza direttamente il codice Kotlin, il che è fino a 2 volte più veloce. Inoltre, comprende meglio i costrutti del linguaggio Kotlin.

Puoi eseguire kapt e KSP contemporaneamente nel tuo progetto durante la migrazione, che può essere eseguita modulo per modulo, libreria per libreria.

Ecco una panoramica dei passaggi della migrazione:

  1. Controlla le librerie che utilizzi per il supporto di KSP
  2. Aggiungi il plug-in KSP al tuo progetto
  3. Sostituisci i processori di annotazioni con KSP
  4. Rimuovi il plug-in kapt

Controlla le librerie che utilizzi per il supporto di KSP

Per iniziare, controlla se le librerie che utilizzi con kapt supportano già KSP. Questo è il caso di molte librerie popolari (tra cui Dagger, Glide, Room e Moshi) e altre stanno aggiungendo il supporto.

Puoi consultare l'elenco delle librerie supportate nella documentazione o fare riferimento alla documentazione e all'Issue Tracker delle librerie che utilizzi.

Aggiungi il plug-in KSP al tuo progetto

Innanzitutto, dichiara il plug-in KSP nel file build.gradle.kts di primo livello. Puoi trovare un elenco delle release nella pagina GitHub di KSP.

Kotlin

plugins {
    id("com.google.devtools.ksp") version "2.3.4" apply false
}

Alla moda

plugins {
    id 'com.google.devtools.ksp' version '2.3.4' apply false
}

Quindi, attiva KSP nel file build.gradle.kts a livello di modulo:

Kotlin

plugins {
    id("com.google.devtools.ksp")
}

Alla moda

plugins {
    id 'com.google.devtools.ksp'
}

Sostituisci i processori di annotazioni con KSP

Con KSP abilitato, puoi iniziare a sostituire gli utilizzi di kapt con KSP. Per la stragrande maggioranza delle librerie, è sufficiente modificare kapt in ksp nella dichiarazione della dipendenza, poiché il processore di annotazioni e il processore KSP vengono forniti nello stesso artefatto.

Kotlin

dependencies {
    kapt("androidx.room:room-compiler:2.5.0")
    ksp("androidx.room:room-compiler:2.5.0")
}

Alla moda

dependencies {
    kapt 'androidx.room:room-compiler:2.5.0'
    ksp 'androidx.room:room-compiler:2.5.0'
}

Dopo aver eseguito il passaggio a KSP, sincronizza e crea il progetto per verificare che funzioni ancora correttamente.

Ecco alcuni problemi comuni da tenere in considerazione:

  • Alcune librerie non supportano esattamente lo stesso insieme di funzionalità con kapt e KSP. Se il codice non funziona dopo la migrazione, consulta la documentazione della libreria.
  • KSP dispone di informazioni sui tipi Kotlin più accurate rispetto a kapt (ad esempio, sulla nullabilità), il che significa che i processori KSP possono essere più precisi sui requisiti dei tipi. Questo potrebbe richiedere alcune correzioni anche nel codice sorgente, oltre all'aggiornamento dei file di build.
  • Se in precedenza passavi argomenti al processore di annotazioni, ora probabilmente dovrai passarli a KSP. Tieni presente che il formato degli argomenti potrebbe variare tra kapt e KSP. Per saperne di più, consulta la documentazione di KSP e la documentazione della libreria che stai utilizzando.

Rimuovi il plug-in kapt

Quando non hai più dipendenze incluse con kapt nel tuo modulo, rimuovi il plug-in kapt.

Se è stato dichiarato in un blocco plugins:

Kotlin

plugins {
    id("org.jetbrains.kotlin.kapt")
}

Alla moda

plugins {
    id 'org.jetbrains.kotlin.kapt'
}

Se utilizzava la sintassi apply plugin con Groovy:

apply plugin: 'kotlin-kapt'

Devi anche rimuovere qualsiasi configurazione residua relativa a kapt, ad esempio:

Kotlin


kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Alla moda


kapt {
    correctErrorTypes true
    useBuildCache true
}

Risorse aggiuntive