Berita Produk

Room 3.0 - Memodernisasi Room

Waktu baca: 4 menit
Daniel Santiago Rivera
Software Engineer

Alfa pertama Room 3.0 telah dirilis. Room 3.0 adalah versi library yang sangat berbeda dan berfokus pada Multiplatform Kotlin (KMP) serta menambahkan dukungan untuk JavaScript dan WebAssembly (WASM) di atas dukungan desktop Android, iOS, dan JVM yang ada. 

Dalam blog ini, kami menguraikan perubahan yang tidak kompatibel, alasan di balik Room 3.0, dan berbagai hal yang dapat Anda lakukan untuk bermigrasi dari Room 2.0.

Perubahan yang dapat menyebabkan gangguan

Room 3.0 mencakup perubahan API yang dapat menyebabkan gangguan berikut: 

  • Menghentikan API SupportSQLite: Room 3.0 sepenuhnya didukung oleh API driver androidx.sqlite. API SQLiteDriver kompatibel dengan KMP dan penghapusan dependensi Room pada API Android menyederhanakan tampilan API untuk Android karena menghindari dua kemungkinan backend.
  • Tidak ada lagi pembuatan kode Java: Room 3.0 secara eksklusif menghasilkan kode Kotlin. Hal ini selaras dengan paradigma yang terus berkembang, yaitu Kotlin-first, tetapi juga menyederhanakan codebase dan proses pengembangan, sehingga memungkinkan iterasi yang lebih cepat.
  • Fokus pada KSP: Kami juga menghentikan dukungan untuk Pemrosesan Anotasi (AP) Java dan KAPT. Room 3.0 hanyalah pemroses KSP (Kotlin Symbol Processing), yang memungkinkan pemrosesan codebase Kotlin yang lebih baik tanpa dibatasi oleh bahasa Java.
  • Coroutines terlebih dahulu: Room 3.0 mendukung coroutine Kotlin, sehingga API-nya menjadi coroutine-first. Coroutine adalah framework asinkron yang kompatibel dengan KMP dan membuat Room menjadi asinkron secara alami adalah persyaratan penting untuk mendukung platform web.

Paket baru

Untuk mencegah masalah kompatibilitas dengan implementasi Room 2.x yang ada dan untuk library dengan dependensi transitif ke Room (misalnya, WorkManager), Room 3.0 berada di paket baru yang berarti juga memiliki ID grup dan artefak Maven baru. Misalnya, androidx.room:room-runtime telah menjadi androidx.room3:room3-runtime dan class seperti androidx.room.RoomDatabase kini akan berada di androidx.room3.RoomDatabase.

Kotlin dan Coroutine First

Tanpa pembuatan kode Java lagi, Room 3.0 juga memerlukan KSP dan compiler Kotlin meskipun codebase yang berinteraksi dengan Room ada di Java. Sebaiknya miliki project multi-modul tempat penggunaan Room terkonsentrasi dan Plugin Gradle Kotlin serta KSP dapat diterapkan tanpa memengaruhi codebase lainnya.

Room 3.0 juga mewajibkan fungsi Coroutine dan khususnya fungsi DAO ditangguhkan kecuali jika fungsi tersebut menampilkan jenis reaktif, seperti Flow. Room 3.0 tidak mengizinkan fungsi DAO pemblokiran. Lihat dokumentasi Coroutine di Android tentang cara mulai mengintegrasikan Coroutine ke dalam aplikasi Anda.

Migrasi ke API SQLiteDriver

Dengan beralih dari SupportSQLite, aplikasi harus bermigrasi ke SQLiteDriver API. Migrasi ini penting untuk memanfaatkan manfaat penuh Room 3.0, termasuk memungkinkan penggunaan library SQLite yang di-bundle melalui BundledSQLiteDriver. Anda dapat mulai bermigrasi ke Driver API hari ini dengan Room 2.7.0+. Sebaiknya hindari penggunaan SupportSQLite lebih lanjut. Jika Anda memigrasikan integrasi Room ke SQLiteDriver API, transisi ke Room 3.0 akan lebih mudah karena perubahan paket sebagian besar melibatkan pembaruan referensi simbol (impor) dan mungkin memerlukan perubahan minimal pada situs panggilan.

Untuk mengetahui ringkasan singkat tentang API SQLiteDriver, lihat dokumentasi API SQLiteDriver.

Untuk mengetahui detail selengkapnya tentang cara memigrasikan Room agar menggunakan API SQLiteDriver, lihat dokumentasi resmi untuk bermigrasi dari SupportSQLite.

Wrapper SupportSQLite Room

Kami memahami bahwa menghapus SupportSQLite sepenuhnya mungkin tidak dapat dilakukan dengan segera untuk semua project. Untuk mempermudah transisi ini, Room 2.8.0, versi terbaru dari seri Room 2.0, memperkenalkan artefak baru yang disebut androidx.room:room-sqlite-wrapper. Artefak ini menawarkan API kompatibilitas yang memungkinkan Anda mengonversi RoomDatabase menjadi SupportSQLiteDatabase, meskipun API SupportSQLite di database telah dinonaktifkan karena SQLiteDriver diinstal. Hal ini memberikan jembatan sementara bagi developer yang memerlukan waktu tambahan untuk memigrasikan codebase mereka sepenuhnya. Artefak ini terus ada di Room 3.0 sebagai androidx.room3:room3-sqlite-wrapper untuk memungkinkan migrasi ke Room 3.0 sekaligus tetap mendukung penggunaan SupportSQLite yang penting.

Misalnya, pemanggilan roomDatabase.openHelper.writableDatabase dapat diganti dengan roomDatabase.getSupportWrapper() dan wrapper akan disediakan meskipun setDriver() dipanggil di builder Room.

Untuk mengetahui detail selengkapnya, lihat dokumentasi room-sqlite-wrapper.

Dukungan Web Room dan SQLite

Dukungan untuk target Kotlin Multiplatform JS dan WasmJS menghadirkan beberapa perubahan API yang paling signifikan. Secara khusus, banyak API di Room 3.0 adalah fungsi penangguhan karena dukungan yang tepat untuk penyimpanan web bersifat asinkron. API SQLiteDriver juga telah diupdate untuk mendukung Web dan driver asinkron web baru tersedia di androidx.sqlite:sqlite-web. Driver ini berbasis Web Worker yang memungkinkan database dipertahankan dalam sistem file pribadi Origin (OPFS).

Untuk mengetahui detail selengkapnya tentang cara menyiapkan Room untuk Web, lihat catatan rilis Room 3.0.

Jenis Nilai yang Ditampilkan DAO Kustom

Room 3.0 memperkenalkan kemampuan untuk menambahkan integrasi kustom ke Room yang mirip dengan RxJava dan Paging. Melalui API anotasi baru yang disebut @DaoReturnTypeConverter, Anda dapat membuat integrasi sendiri sehingga kode yang dihasilkan Room dapat diakses saat runtime. Dengan demikian, fungsi @Dao dapat memiliki jenis nilai yang ditampilkan kustom tanpa harus menunggu tim Room menambahkan dukungan. Integrasi yang ada dimigrasikan untuk menggunakan fungsi ini sehingga kini akan mewajibkan pengguna yang mengandalkannya untuk menambahkan konverter ke definisi @Database atau @Dao.

Misalnya, konverter Penomoran Halaman akan berada di artefak androidx.room3:room3-paging dan disebut PagingSourceDaoReturnTypeConverter. Sementara itu, untuk LiveData, konverter berada di androidx.room3:room3-livedata dan disebut LiveDataDaoReturnTypeConverter.

Untuk mengetahui detail selengkapnya, lihat bagian DAO Return Type Converters di catatan rilis Room 3.0.

Mode pemeliharaan Room 2.x

Karena pengembangan Room akan berfokus pada Room 3, versi Room 2.x saat ini memasuki mode pemeliharaan. Artinya, tidak ada fitur utama yang akan dikembangkan, tetapi rilis patch (2.8.1, 2.8.2, dll.) akan tetap dilakukan dengan perbaikan bug dan update dependensi. Tim berkomitmen untuk melakukan pekerjaan ini hingga Room 3 menjadi stabil.

Kesimpulan

Kami sangat antusias dengan potensi Room 3.0 dan peluang yang ditawarkannya untuk ekosistem Kotlin. Nantikan info terbarunya selagi kami melanjutkan perjalanan ini.

Lanjutkan membaca