È stata rilasciata la prima versione alpha di Room 3.0. Room 3.0 è una versione della libreria con modifiche sostanziali che si concentra su Kotlin Multiplatform (KMP) e aggiunge il supporto per JavaScript e WebAssembly (WASM) oltre al supporto esistente per Android, iOS e JVM per computer.
In questo blog illustriamo le modifiche che provocano un errore, il ragionamento alla base di Room 3.0 e le varie operazioni che puoi eseguire per eseguire la migrazione da Room 2.0.
Modifiche che provocano un errore
Room 3.0 include le seguenti modifiche che provocano errori all'API:
- Ritiro delle API SupportSQLite:Room 3.0 è completamente supportato dalle API del driver androidx.sqlite. Le API SQLiteDriver sono compatibili con KMP e la rimozione della dipendenza di Room dall'API di Android semplifica la superficie dell'API per Android, poiché evita di avere due possibili backend.
- Nessuna generazione di codice Java: Room 3.0 genera esclusivamente codice Kotlin. Questo approccio è in linea con l'evoluzione del paradigma Kotlin-first, ma semplifica anche il codebase e il processo di sviluppo, consentendo iterazioni più rapide.
- Focus su KSP: stiamo anche abbandonando il supporto per l'elaborazione delle annotazioni Java (AP) e KAPT. Room 3.0 è un processore esclusivamente KSP (Kotlin Symbol Processing), che consente una migliore elaborazione dei codebase Kotlin senza essere limitato dal linguaggio Java.
- Coroutine-first: Room 3.0 adotta le coroutine Kotlin, rendendo le sue API coroutine-first. Le coroutine sono il framework asincrono compatibile con KMP e rendere Room asincrono per natura è un requisito fondamentale per supportare le piattaforme web.
Un nuovo pacchetto
Per evitare problemi di compatibilità con le implementazioni esistenti di Room 2.x e per le librerie con dipendenze transitive a Room (ad esempio WorkManager), Room 3.0 si trova in un nuovo pacchetto, il che significa che ha anche un nuovo gruppo Maven e nuovi ID artefatto. Ad esempio, androidx.room:room-runtime è diventato androidx.room3:room3-runtime e classi come androidx.room.RoomDatabase ora si troveranno in androidx.room3.RoomDatabase.
Kotlin e coroutine in primo piano
Senza la generazione di codice Java, Room 3.0 richiede anche KSP e il compilatore Kotlin, anche se il codebase che interagisce con Room è in Java. Ti consigliamo di avere un progetto multimodulo in cui l'utilizzo di Room sia concentrato e il plug-in Kotlin Gradle e KSP possano essere applicati senza influire sul resto del codebase.
Room 3.0 richiede anche le coroutine e, più specificamente, le funzioni DAO devono essere sospese, a meno che non restituiscano un tipo reattivo, come un Flow. Room 3.0 non consente di bloccare le funzioni DAO. Consulta la documentazione sulle coroutine su Android per iniziare a integrare le coroutine nella tua applicazione.
Migrazione alle API SQLiteDriver
Con l'abbandono di SupportSQLite, le app dovranno eseguire la migrazione alle API SQLiteDriver. Questa migrazione è essenziale per sfruttare tutti i vantaggi di Room 3.0, tra cui l'utilizzo della libreria SQLite in bundle tramite BundledSQLiteDriver. Puoi iniziare a eseguire la migrazione alle API del driver oggi stesso con Room 2.7.0 e versioni successive. Ti consigliamo vivamente di evitare di utilizzare ulteriormente SupportSQLite. Se esegui la migrazione delle integrazioni di Room alle API SQLiteDriver, la transizione a Room 3.0 è più semplice, poiché la modifica del pacchetto comporta principalmente l'aggiornamento dei riferimenti ai simboli (importazioni) e potrebbe richiedere modifiche minime ai siti di chiamata.
Per una breve panoramica delle API SQLiteDriver, consulta la documentazione delle API SQLiteDriver.
Per maggiori dettagli su come eseguire la migrazione di Room per utilizzare le API SQLiteDriver, consulta la documentazione ufficiale per la migrazione da SupportSQLite.
Wrapper SupportSQLite di Room
Siamo consapevoli che la rimozione completa di SupportSQLite potrebbe non essere immediatamente fattibile per tutti i progetti. Per facilitare questa transizione, Room 2.8.0, l'ultima versione della serie Room 2.0, ha introdotto un nuovo artefatto chiamato androidx.room:room-sqlite-wrapper. Questo artefatto offre un'API di compatibilità che consente di convertire un RoomDatabase in un SupportSQLiteDatabase, anche se le API SupportSQLite nel database sono state disabilitate a causa dell'installazione di un SQLiteDriver. In questo modo, gli sviluppatori che hanno bisogno di più tempo per eseguire la migrazione completa del proprio codebase possono usufruire di un periodo di transizione. Questo artefatto continua a esistere in Room 3.0 come androidx.room3:room3-sqlite-wrapper per consentire la migrazione a Room 3.0, pur continuando a supportare l'utilizzo critico di SupportSQLite.
Ad esempio, le chiamate di roomDatabase.openHelper.writableDatabase possono essere sostituite da roomDatabase.getSupportWrapper() e viene fornito un wrapper anche se setDriver() viene chiamato sul builder di Room.
Per maggiori dettagli, consulta la documentazione di room-sqlite-wrapper.
Supporto web di Room e SQLite
Supporto per i target Kotlin Multiplatform JS e WasmJS e introduzione di alcune delle modifiche più significative alle API. In particolare, molte API in Room 3.0 sono funzioni di sospensione, poiché il supporto adeguato per l'archiviazione web è asincrono. Anche le API SQLiteDriver sono state aggiornate per supportare il web ed è disponibile un nuovo driver asincrono web in androidx.sqlite:sqlite-web. Si tratta di un driver basato su Web Worker che consente di rendere persistente il database nel file system privato di origine (OPFS).
Per maggiori dettagli su come configurare Room per il web, consulta le note di rilascio di Room 3.0.
Tipi restituiti DAO personalizzati
Room 3.0 introduce la possibilità di aggiungere integrazioni personalizzate a Room, simili a RxJava e Paging. Tramite una nuova API di annotazione chiamata @DaoReturnTypeConverter, puoi creare la tua integrazione in modo che il codice generato da Room diventi accessibile in fase di runtime. In questo modo, le funzioni @Dao possono avere i propri tipi restituiti personalizzati senza dover attendere che il team di Room aggiunga il supporto. Le integrazioni esistenti vengono migrate per utilizzare questa funzionalità e, di conseguenza, chi si affida a questa funzionalità dovrà aggiungere i convertitori alle definizioni @Database o @Dao.
Ad esempio, il convertitore di paging si troverà nell'artefatto androidx.room3:room3-paging e si chiamerà PagingSourceDaoReturnTypeConverter. Nel frattempo, per LiveData il convertitore si trova in androidx.room3:room3-livedata ed è chiamato LiveDataDaoReturnTypeConverter.
Per maggiori dettagli, consulta la sezione Convertitori dei tipi restituiti DAO nelle note di rilascio di Room 3.0.
Modalità di manutenzione di Room 2.x
Poiché lo sviluppo di Room si concentrerà su Room 3, l'attuale versione Room 2.x entra in modalità di manutenzione. Ciò significa che non verranno sviluppate funzionalità principali, ma verranno comunque rilasciate patch (2.8.1, 2.8.2 e così via) con correzioni di bug e aggiornamenti delle dipendenze. Il team si impegna a svolgere questo lavoro finché la stanza 3 non diventerà stabile.
Considerazioni finali
Siamo davvero entusiasti del potenziale di Room 3.0 e delle opportunità che offre all'ecosistema Kotlin. Continua a seguirci per altri aggiornamenti mentre proseguiamo questo percorso.
-
Novità sui prodottiLe app che hanno come target la prossima release di Android non potranno più scrivere direttamente nei contatti con l'autorizzazione WRITE_CONTACTS.
Roxanna Aliabadi Walker • Tempo di lettura: 6 min -
Novità sui prodottiCon l'accelerazione dello sviluppo agentico, l'engineering di Android sta raggiungendo una nuova entusiasmante frontiera: il passaggio dal completamento del codice assistito agli agenti che eseguono end-to-end sotto la tua direzione. Hai la massima scelta e flessibilità nei modelli e negli agenti che utilizzi.
Jason Buchel • Tempo di lettura: 3 min -
Novità sui prodottiOggi abbiamo condiviso il modo in cui stiamo portando la nostra visione di "più di uno store" nel suo prossimo capitolo. Dalla scheda Tu, ora la home base personale per oltre 250 milioni di utenti attivi mensili, alla nostra piattaforma di gioco unificata che collega oltre 700 milioni di profili di giocatori, Google Play va incontro agli utenti ovunque si trovino.
Paul Feng • Tempo di lettura: 3 min
Ricevi gli ultimi approfondimenti sullo sviluppo di Android direttamente nella tua casella di posta ogni settimana.