Migrazione da kapt a KSP

Kapt (lo strumento di elaborazione delle annotazioni Kotlin) ti consente di utilizzare gli elaboratori di annotazioni Java con il codice Kotlin, anche se questi elaboratori non hanno un supporto specifico per Kotlin. Questo viene fatto generando stub Java dai file Kotlin che i processori possono poi leggere. Questa generazione di stub è un'operazione costosa e ha un impatto significativo sulla velocità di compilazione.

KSP (Kotlin Symbol Processing) è un'alternativa a Kotlin per kapt. KSP analizza direttamente il codice Kotlin, il che è fino a due volte più rapido. Inoltre, ha una migliore comprensione dei 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 di migrazione:

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

Controlla le librerie che utilizzi per il supporto 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 controllare l'elenco delle librerie supportate nella documentazione o consultare la documentazione e il tracker dei problemi delle librerie che utilizzi.

Aggiungere il plug-in KSP al progetto

Innanzitutto, dichiara il plug-in KSP nel file build.gradle.kts di primo livello. Assicurati di scegliere una versione KSP in linea con la versione Kotlin del tuo progetto. Puoi trovare un elenco delle release nella pagina GitHub di KSP.

Kotlin

plugins {
    id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false
}

Groovy

plugins {
    id 'com.google.devtools.ksp' version '2.0.21-1.0.27' apply false
}

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

Kotlin

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

Groovy

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

Sostituire i processori di annotazioni con KSP

Con KSP abilitato, puoi iniziare a sostituire gli utilizzi di kapt con KSP. Per la maggior parte delle librerie, è sufficiente cambiare kapt in ksp nella dichiarazione delle dipendenze, poiché il loro elaboratore di annotazioni e l'elaboratore KSP vengono forniti nello stesso artefatto.

Kotlin

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

Groovy

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

Dopo il passaggio a KSP, sincronizza e compila il progetto per verificare se funziona ancora correttamente.

Alcuni problemi comuni da tenere in considerazione:

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

Rimuovi il plug-in kapt

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

Se è stato dichiarato in un blocco di plug-in:

Kotlin

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

Groovy

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

Se utilizzava la sintassi del plug-in apply con Groovy:

apply plugin: 'kotlin-kapt'

Devi anche rimuovere eventuali configurazioni rimanenti relative a kapt, ad esempio:

Kotlin


kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Groovy


kapt {
    correctErrorTypes true
    useBuildCache true
}

Risorse aggiuntive