Retour à l'accueil

Room 3 : wasmJs et coroutines dans KMP

Room 3.0.0-alpha02 introduit le paquet room3 avec wasmJs, coroutines et support KSP. Migration simplifiée : mise à jour du plugin et des imports. Adapté aux projets KMP avec cibles web.

Migration vers Room 3 avec support wasmJs
Advertisement 728x90

Room 3 : Migration vers la nouvelle version majeure avec prise en charge de wasmJs et des coroutines

Room 3 introduit le package androidx.room3, éliminant complètement la dépendance à l'API spécifique Android SQLite Driver. L'API publique utilise désormais des alternatives documentées pour la gestion des connexions.

Exemple de transition de l'ancien style vers le nouveau :

// Avant
roomDatabase.query("select * from users").use { cursor -> ... }

// Après
roomDatabase.useReaderConnection { connection ->
  connection.usePrepared("select * from users") { stmt -> ... }
}

La génération de code est passée de KAPT à KSP. Toute la logique interne des DAO a été réécrite pour utiliser des coroutines, simplifiant le travail asynchrone dans Kotlin Multiplatform.

Google AdInline article slot

La mise à niveau clé est la prise en charge de wasmJs. La version KMP de Room est désormais compatible avec WebAssembly, ouvrant des possibilités pour le développement web mobile.

Les fonctionnalités obsolètes ont été supprimées, nettoyant la base de code du code hérité.

Étapes pour migrer vers Room 3

La migration se déroule sans changements architecturaux radicaux. Les principales étapes sont :

Google AdInline article slot
  • Mettre à jour le plugin et les dépendances dans build.gradle.kts :
// build.gradle.kts racine
plugins {
    id("androidx.room3") version "3.0.0-alpha02" apply false
}

// build.gradle.kts du module
plugins {
    id("androidx.room3")
}

kotlin {
  sourceSets {
    commonMain {
      val room_version = "3.0.0-alpha02"
      implementation("androidx.room3:room3-runtime:$room_version")
      ksp("androidx.room3:room3-compiler:$room_version")   
    } 
  }
}

room3 {
    schemaDirectory("$projectDir/schemas")
}
  • Remplacer les imports : RoomDatabase, @Entity et autres classes sont désormais dans le package room3.
  • Construire le projet et corriger les erreurs. Des fonctions suspend ont été ajoutées aux DAO, et la nomenclature des méthodes a changé.
  • Vérifier les schémas de base de données dans le répertoire schemas — Room 3 les exige pour la compilation.

Après la migration, tester sur toutes les cibles : JVM, Android, iOS, wasmJs.

Avantages pour le développement KMP

  • Coroutines au cœur : Les fonctions suspend sont la norme dans les DAO, éliminant le besoin de Flow ou LiveData.
  • wasmJs : La prise en charge complète de WebAssembly permet d'exécuter Room dans le navigateur sans contournements.
  • KSP au lieu de KAPT : Compilation plus rapide, moins d'artefacts.

Comparaison des performances de génération de code (basée sur des projets KMP typiques) :

| Métrique | Room 2 (KAPT) | Room 3 (KSP) |

Google AdInline article slot

|------------------------|---------------|---------------|

| Temps de compilation | 45 sec | 22 sec |

| Taille APK | 1,2 Mo | 0,9 Mo |

| Fonctionne sur wasm | Non | Oui |

Les données sont approximatives et dépendent de la taille du projet.

Points clés

  • Nouveau package room3 avec une API propre sans dépendances Android.
  • Prise en charge complète des coroutines et de KSP pour KMP.
  • Intégration wasmJs pour les applications web.
  • Migration simple : mise à jour des dépendances + correction des imports.
  • Version alpha : attendre la version stable pour une utilisation en production.

Recommandations d'implémentation

Pour les développeurs de niveau intermédiaire/senior : commencer avec des projets KMP neufs. Pour les projets hérités, reporter la migration jusqu'à la version 3.0.0-stable.

Tester avec des scénarios réels :

  • Transactions avec fonctions suspend.
  • Migrations de schéma dans wasm.
  • Performance des requêtes dans le navigateur.

Room 3 renforce sa position d'ORM universel pour le multiplateforme, surtout avec la croissance de l'écosystème wasm.

— Editorial Team

Advertisement 728x90

Lire ensuite