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) selain dukungan desktop Android, iOS, dan JVM yang ada.
Dalam blog ini, kami menguraikan perubahan yang dapat menyebabkan gangguan, 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 SupportSQLite API: Room 3.0 sepenuhnya didukung oleh androidx.sqlite driver API. SQLiteDriver API kompatibel dengan KMP dan menghapus dependensi Room pada API Android akan menyederhanakan platform API untuk Android karena menghindari dua backend yang mungkin.
- Tidak ada lagi pembuatan kode Java: Room 3.0 hanya membuat kode Kotlin. Hal ini selaras dengan paradigma yang terus berkembang dan mengutamakan Kotlin, 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 hanya merupakan prosesor KSP (Pemrosesan Simbol Kotlin), yang memungkinkan pemrosesan codebase Kotlin yang lebih baik tanpa dibatasi oleh bahasa Java.
- Mengutamakan Coroutine: Room 3.0 menggunakan coroutine Kotlin, sehingga API-nya mengutamakan coroutine. Coroutine adalah framework asinkron yang kompatibel dengan KMP dan membuat Room menjadi asinkron secara alami merupakan 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 dalam paket baru yang berarti juga memiliki grup maven dan ID artefak 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.
Mengutamakan Kotlin dan Coroutine
Tanpa pembuatan kode Java lagi, Room 3.0 juga memerlukan KSP dan compiler Kotlin meskipun codebase yang berinteraksi dengan Room berada di Java. Sebaiknya gunakan project multi-modul tempat penggunaan Room terkonsentrasi dan Plugin Gradle Kotlin serta KSP dapat diterapkan tanpa memengaruhi codebase lainnya.
Room 3.0 juga memerlukan Coroutine dan khususnya fungsi DAO harus ditangguhkan kecuali jika menampilkan jenis reaktif, seperti Flow. Room 3.0 tidak mengizinkan fungsi DAO pemblokiran. Lihat dokumentasi Coroutine di Android tentang cara memulai integrasi Coroutine ke dalam aplikasi Anda.
Migrasi ke SQLiteDriver API
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 dibundel 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 ringkasan singkat SQLiteDriver API, lihat dokumentasi SQLiteDriver API.
Untuk mengetahui detail selengkapnya tentang cara memigrasikan Room agar menggunakan SQLiteDriver API, lihat dokumentasi resmi untuk bermigrasi dari SupportSQLite.
Wrapper SupportSQLite Room
Kami memahami bahwa penghapusan SupportSQLite sepenuhnya mungkin tidak dapat dilakukan langsung 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 SupportSQLite API dalam database telah dinonaktifkan karena SQLiteDriver diinstal. Hal ini memberikan jembatan sementara bagi developer yang memerlukan lebih banyak waktu untuk memigrasikan codebase 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 Multiplatform Kotlin JS dan WasmJS serta 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. SQLiteDriver API 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. Hal ini memungkinkan fungsi @Dao memiliki jenis nilai yang ditampilkan kustom tanpa harus menunggu tim Room menambahkan dukungan. Integrasi yang ada dimigrasikan untuk menggunakan fungsi ini sehingga kini akan mengharuskan pengguna yang mengandalkannya untuk menambahkan konverter ke definisi @Database atau @Dao.
Misalnya, konverter Paging 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 Konverter Jenis Nilai yang Ditampilkan DAO 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 terjadi 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 informasi terbaru saat kami melanjutkan perjalanan ini.
-
Berita ProdukPada bulan Maret lalu, kami memperkenalkan Android Bench—papan peringkat LLM untuk tugas pengembangan Android di dunia nyata. Sejak saat itu, kami telah meningkatkan tolok ukur berdasarkan masukan Anda, termasuk mengevaluasi model open-weight dan menambahkan dimensi biaya dan efisiensi ke papan peringkat.
Zoe Lopez-Latorre • Waktu baca: 3 menit -
Berita ProdukDi Google Play, kami berkomitmen untuk memberikan pengalaman terbaik kepada pengguna, sekaligus memastikan developer memiliki alat dan kemampuan beradaptasi untuk meraih kesuksesan.
Paul Feng • Waktu baca: 3 menit -
Berita ProdukTahun lalu, kami memperkenalkan verifikasi developer Android untuk memperkuat keamanan ekosistem dan menghentikan pelaku kejahatan yang bersembunyi di balik anonimitas untuk merilis aplikasi berbahaya.
Matthew Forsythe • Waktu baca: 2 menit
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.