Room
Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
21 Agustus 2024 | 2.6.1 | - | - | 2.7.0-alpha07 |
Mendeklarasikan dependensi
Untuk menambahkan dependensi pada Room, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.
Dependensi untuk Room mencakup pengujian migrasi Room dan Room RxJava
Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle
bagi aplikasi atau modul Anda:
Groovy
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // To use Kotlin annotation processing tool (kapt) kapt "androidx.room:room-compiler:$room_version" // To use Kotlin Symbol Processing (KSP) ksp "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") annotationProcessor("androidx.room:room-compiler:$room_version") // To use Kotlin annotation processing tool (kapt) kapt("androidx.room:room-compiler:$room_version") // To use Kotlin Symbol Processing (KSP) ksp("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
Untuk informasi tentang cara menggunakan plugin KAPT, lihat dokumentasi KAPT.
Untuk informasi tentang cara menggunakan plugin KSP, lihat dokumentasi memulai cepat KSP.
Untuk informasi tentang cara menggunakan ekstensi Kotlin, lihat dokumentasi ktx.
Untuk informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.
Atau, untuk library non-Android (yaitu modul Gradle khusus Java atau Kotlin),
Anda dapat bergantung pada androidx.room:room-common
untuk menggunakan anotasi Room.
Mengonfigurasi Opsi Compiler
Room memiliki opsi pemroses anotasi berikut.
room.schemaLocation |
directory
Mengaktifkan ekspor skema database ke dalam file JSON dalam saat ini. Lihat Migrasi Room untuk informasi selengkapnya. |
room.incremental |
boolean
Mengaktifkan pemroses anotasi inkremental Gradle. Nilai default adalah true .
|
room.generateKotlin |
boolean
Membuat file sumber Kotlin, bukan Java. Memerlukan KSP. Nilai defaultnya adalah false .
Lihat catatan versi 2.6.0 untuk detail selengkapnya.
|
Menggunakan Plugin Room Gradle
Dengan Room versi 2.6.0 dan yang lebih tinggi, Anda dapat menggunakan Plugin Room Gradle untuk mengonfigurasi opsi untuk compiler Room. Plugin mengonfigurasi project seperti yang menghasilkan skema (yang merupakan {i> output<i} dari tugas kompilasi dan digunakan untuk migrasi otomatis) dikonfigurasi dengan benar agar dapat direproduksi dan build yang dapat di-cache.
Untuk menambahkan plugin, di file build Gradle level teratas, tentukan plugin dan versinya.
Groovy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
Dalam file build Gradle level modul, terapkan plugin dan gunakan room
.
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
Menyetel schemaDirectory
diperlukan saat menggunakan Plugin Room Gradle. Ini
akan mengonfigurasi compiler Room dan berbagai tugas kompilasi serta backend-nya
(javac, KAPT, KSP) untuk menghasilkan output file skema ke dalam folder yang sesuai, misalnya
schemas/flavorOneDebug/com.package.MyDatabase/1.json
. File-file ini harus
yang masuk ke repositori untuk digunakan
untuk validasi dan migrasi otomatis.
Beberapa opsi tidak dapat dikonfigurasi di semua versi Plugin Room Gradle,
meskipun didukung oleh compiler Room. Tabel di bawah ini mencantumkan setiap
dan menampilkan versi Plugin Room Gradle yang menambahkan dukungan untuk
mengonfigurasi opsi tersebut menggunakan ekstensi room
. Jika versi Anda lebih rendah,
atau jika opsi ini belum didukung, Anda dapat menggunakan
opsi pemroses anotasi.
Opsi | Sejak versi |
---|---|
room.schemaLocation (wajib diisi) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Menggunakan opsi pemroses anotasi
Jika Anda tidak menggunakan Plugin Room Gradle, atau jika opsi yang Anda inginkan tidak didukung oleh versi plugin Anda, Anda dapat mengonfigurasi Room menggunakan opsi pemroses anotasi, seperti dijelaskan dalam Menambahkan dependensi build. Bagaimana Anda menentukan opsi anotasi bergantung pada apakah Anda menggunakan KSP atau KAPT untuk Room.
Groovy
// For KSP ksp { arg("option_name", "option_value") // other otions... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "option_name":"option_value", // other options... ] } } } }
Kotlin
// For KSP ksp { arg("option_name", "option_value") // other options... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "option_name" to "option_value", // other options... ) } } } }
Karena room.schemaLocation
adalah direktori dan bukan jenis primitif, jenis ini
diperlukan CommandLineArgumentsProvider
saat menambahkan opsi ini, jadi
yang diketahui Gradle tentang direktori
ini saat melakukan pemeriksaan terbaru.
Memigrasikan database Room
menunjukkan implementasi lengkap dari CommandLineArgumentsProvider
yang menyediakan
lokasi skema.
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Versi 2.7
Versi 2.7.0-alpha07
21 Agustus 2024
androidx.room:room-*:2.7.0-alpha07
dirilis. Versi 2.7.0-alpha07 berisi commit ini.
Fitur Baru
- Plugin Room Gradle kini akan otomatis menambahkan skema yang diekspor ke sumber resource Uji Instrumentasi Android sehingga dapat digunakan oleh
MigrationTestHelper
.
Perbaikan Bug
- Memperbaiki masalah 'sebenarnya' dari
RoomDatabaseConstructor
yang dihasilkan yang tidak memiliki pengubah 'sebenarnya' dalam fungsiinitialize
jika fungsi tersebut juga diganti dalam deklarasi 'harapan'. (359631627) - Memperbaiki masalah 'sebenarnya' yang dihasilkan dari
RoomDatabaseConstructor
yang tidak cocok dengan visibilitas pernyataan 'expect'. (358138953)
Versi 2.7.0-alpha06
7 Agustus 2024
androidx.room:room-*:2.7.0-alpha06
dirilis. Versi 2.7.0-alpha06 berisi commit ini.
Perubahan API
- Ubah penyiapan pembuatan instance untuk
RoomDatabase
dalam project KMP.
Karena model kompilasi Kotlin 2.0, strategi untuk mereferensikan fungsi yang akan dihasilkan, dengan nama instantiateImpl()
, lebih valid. Dua API baru, @ConstructedBy
dan RoomDatabaseConstructor
diperkenalkan untuk menggantikan strategi instantiateImpl()
. Strategi baru tersebut adalah sebagai berikut:
Tentukan objek apa yang diharapkan yang mengimplementasikan
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Tautkan objek dengan deklarasi
@Database
menggunakan@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Membuat instance database baru tanpa meneruskan argumen factory
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Perbaikan b/316978491, b/338446862, dan b/342905180
- Dukungan untuk
@RawQuery
di KMP Room dengan menambahkan API baru bernamaRoomRawQuery
yang mirip denganSupportSQLiteQuery
dalam hal mempertahankan string SQL mentah dan fungsi untuk mengikat argumen ke dalam pernyataan. Fungsi yang dianotasi@RawQuery
kini dapat menerimaRoomRawQuery
sebagai parameter tunggalnya. (Iea844, b/330586815) - Tambahkan overload
setQueryCallback()
yang menerimaCoroutineContext
. (Id66ff, b/309996304) - Menambahkan dukungan untuk target Multiplatform Kotlin
linuxArm64
(I139d3, b/338268719)
Perbaikan Bug
- Memperbaiki masalah saat Room salah menghasilkan panggilan ke
recursiveFetchArrayMap
di target non-Android. (710c36, b/352482325) - Memperbaiki masalah saat Room terkadang menampilkan pengecualian tentang 'Waktu tunggu habis mencoba koneksi' dalam project KMP. (fa72d0, b/347737870)
- Memperbaiki masalah dalam migrasi otomatis yang memeriksa kunci asing terlalu dini sebelum tabel lain mengubah skemanya agar sesuai dengan kunci asing baru. (7672c0, b/352085724)
Versi 2.7.0-alpha05
10 Juli 2024
androidx.room:room-*:2.7.0-alpha05
dirilis. Versi 2.7.0-alpha05 berisi commit ini.
Perubahan API
- Mengganti nama
SQLiteKt
menjadiSQLite
, danBundledSQLiteKt
menjadiBundledSQLite
. (I8b501)
Perbaikan Bug
- Memperbaiki bug saat
RoomDatabase
mengalami deadlock atau error dengan waktu tunggu koneksi habis saat menggunakanAndroidSQLiteDriver
.
Versi 2.7.0-alpha04
12 Juni 2024
androidx.room:room-*:2.7.0-alpha04
dirilis. Versi 2.7.0-alpha04 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah dalam pemroses anotasi Room yang akan menghasilkan kode KMP yang tidak kompatibel saat jenis nilai yang ditampilkan multi-peta ditentukan di DAO. (b/340983093)
- Memperbaiki masalah saat Room gagal menemukan implementasi database yang dihasilkan jika class yang dianotasi
@Database
tidak memiliki paket. (b/342097292) - Memperbaiki masalah saat mengaktifkan penutupan otomatis dan pembatalan multi-instance terkadang akan menyebabkan
ConcurrentModificationException
saat database ditutup secara otomatis karena tidak ada aktivitas.
Versi 2.7.0-alpha03
29 Mei 2024
androidx.room:room-*:2.7.0-alpha03
dirilis. Versi 2.7.0-alpha03 berisi commit ini.
Perbaikan Bug
- Memperbaiki berbagai masalah terkait Kotlin 2.0 dan KSP 2.0. Perhatikan bahwa Kotlin 2.0 dengan dukungan KSP 2 belum selesai dan tim sedang mengerjakan berbagai API dan perubahan perilaku di compiler baru. (b/314151707)
Versi 2.7.0-alpha02
14 Mei 2024
androidx.room:room-*:2.7.0-alpha02
dirilis. Versi 2.7.0-alpha02 berisi commit ini.
Perbaikan Bug
- Memperbaiki berbagai masalah KSP.
Versi 2.7.0-alpha01
1 Mei 2024
androidx.room:room-*:2.7.0-alpha01
dirilis. Versi 2.7.0-alpha01 berisi commit ini.
Fitur Baru
- Dukungan Multiplatform Kotlin (KMP): Dalam rilis ini, Room telah difaktorkan ulang menjadi library Multiplatform Kotlin (KMP). Meskipun masih ada sejumlah pekerjaan yang harus dilakukan, rilis ini memperkenalkan versi baru Room dengan sebagian besar fungsinya telah “umum” (dibuat untuk multiplatform). Platform yang didukung saat ini adalah Android, iOS, JVM (Desktop), Mac native, dan Linux native. Semua fungsi yang belum ada di platform yang baru didukung akan disebut sebagai “lengkap fitur” dalam rilis Room mendatang.
Untuk informasi selengkapnya tentang cara mulai menggunakan KMP Room, lihat dokumentasi KMP Room resmi.
- Pembuatan Kode Kotlin di KSP telah DIAKTIFKAN secara default jika pemrosesan dilakukan melalui KSP. Untuk project khusus KAPT atau Java, Room akan tetap membuat sumber Java.
Perubahan API
- Overload
Room.databaseBuilder()
telah ditambahkan dan menggunakan parameter lambda yang dimaksudkan untuk digunakan dengan fungsi yang dihasilkan Room guna menghindari penggunaan refleksi saat membuat instance implementasiRoomDatabase
yang dihasilkan. Contoh penggunaannya adalah:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- API untuk mengonfigurasi Room dengan
CoroutineContext
telah ditambahkan ke builder:RoomDatabase.Builder.setQueryCoroutineContext
. Perhatikan bahwaRoomDatabase
hanya dapat dikonfigurasi dengan eksekutor menggunakansetQueryExecutor
atau dengan konteks Coroutine, tetapi tidak keduanya. - API untuk mengonfigurasi Room dengan Driver
SQLite
telah ditambahkan:RoomDatabase.Builder.setDriver()
. Untuk informasi selengkapnya tentang Driver APISQLite
, lihat dokumentasi KMP SQLite - API untuk mengakses
SQLiteConnection
pokok dari API driver telah ditambahkan:RoomDatabase.useReaderConnection
danRoomDatabase.useWriterConnection
. - Callback terkait Room Varios sekarang memiliki versi kelebihan beban yang menerima
SQLiteConnection
, bukanSupportSQLiteDatabase
. Hal ini dimaksudkan untuk diganti saat bermigrasi ke project KMP. Untuk mengetahui informasi selengkapnya tentang memigrasikan penggunaan Room di aplikasi Android ke modul KMP umum, lihat panduan migrasi. Callback-nya adalah:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- Artefak KTX
androidx.room:room-ktx
telah digabungkan keandroidx.room:room-runtime
bersama semua API-nya, artefak ini sekarang kosong. Hapus project ini dari daftar dependensi Anda.
Versi 2.6
Versi 2.6.1
29 November 2023
androidx.room:room-*:2.6.1
dirilis. Versi 2.6.1 berisi commit ini.
Perbaikan Bug
- Masalah terpecahkan dalam kode yang dihasilkan saat nilai default untuk Kolom ganda di
EntityCursorConverter
ditetapkan ke 0, bukan 0.0. Perbaikan yang mungkin dilakukan untuk kasus tepi yang serupa untuk kolom jenis Float juga telah disertakan. (Id75f5, b/304584179) - Pengecualian yang ditampilkan dari pemuatan
PagingSource
kini akan disebarkan sebagaiLoadStateUpdate
dariLoadResult.Error
yang berisi Throwable. Status error ini dapat diamati melaluiPagingDataAdapter.loadStateFlow(Views)
atauLazyPagingItems.loadState(Compose)
. Perhatikan bahwa tindakan ini menandai perubahan perilaku, yang mana di masa lalu error pemuatan akan muncul sebagai Pengecualian yang ditampilkan oleh metode dao yang memicu pemuatan. (I93887, b/302708983)
Versi 2.6.0
18 Oktober 2023
androidx.room:room-*:2.6.0
dirilis. Versi 2.6.0 berisi commit ini.
Perubahan penting sejak versi 2.5.0
- Opsi untuk mengaktifkan pembuatan kode Kotlin (atau "Kotlin CodeGen") kini tersedia di KSP Room. (4297ec0). Untuk mengaktifkan CodeGen Kotlin di Room, tambahkan nama opsi
room.generateKotlin
ke opsi prosesor untuk KSP. Untuk detail selengkapnya tentang cara meneruskan opsi pemroses untuk KSP, lihat dokumentasi KSP.
Catatan: Saat menggunakan CodeGen Kotlin, penting untuk diperhatikan bahwa ada batasan tambahan yang telah ditambahkan. Properti abstrak sebagai pengambil DAO atau kueri DAO di CodeGen Kotlin tidak diizinkan, dan diharapkan dapat ditulis ulang sebagai fungsi untuk menghindari anggapan palsu bahwa nilai properti tidak dapat diubah dan memiliki hasil tersimpan yang tetap. Batasan lain yang telah ditambahkan adalah bahwa jenis nilai yang ditampilkan koleksi Nullable tidak lagi diizinkan di Room untuk CodeGen Kotlin.
Peringatan: Anda mungkin mendapati bahwa project Anda lebih ketat dalam hal nullability saat menggunakan CodeGen Kotlin. Di CodeGen Kotlin, nullability argumen jenis itu penting, meskipun di Java hal ini sebagian besar diabaikan. Misalnya, Anda memiliki jenis nilai yang ditampilkan `Flow<foo\>` dan tabel kosong. Di Java CodeGen, ini tidak akan menyebabkan masalah apa pun, tetapi di CodeGen Kotlin, Anda akan mendapatkan error. Untuk menghindari hal ini, Anda harus menggunakan `Flow<foo?\>`, dengan asumsi null dimunculkan. </foo?\></foo\>
- Artefak baru untuk Plugin Room Gradle telah ditambahkan ke Room dengan ID
androidx.room
, yang memecahkan berbagai masalah yang ada di Room terkait memiliki input dan output skema melalui opsi pemroses anotasi Gradle. Untuk detail selengkapnya, lihat catatan rilis Room Versi 2.6.0-alpha02. - Class nilai di Entitas Room kini didukung untuk KSP. (4194095)
- Jenis nilai yang ditampilkan Peta bertingkat di fungsi DAO kini didukung di Room. (I13f48, 203008711)
Versi 2.6.0-rc01
20 September 2023
androidx.room:room-*:2.6.0-rc01
dirilis. Versi 2.6.0-rc01 berisi commit berikut ini.
Versi 2.6.0-beta01
23 Agustus 2023
androidx.room:room-*:2.6.0-beta01
dirilis. Versi 2.6.0-beta01 berisi commit ini.
Perbaikan Bug
- Menangani pengecualian kasus khusus
SQLite
selama pembaruan dan penyisipan yang ditemukan saat pengecualian2067 SQLITE_CONSTRAINT_UNIQUE
ditampilkan selama pembaruan dan penyisipan harus melakukan pembaruan. (If2849, b/243039555)
Versi 2.6.0-alpha03
9 Agustus 2023
androidx.room:room-*:2.6.0-alpha03
dirilis. Versi 2.6.0-alpha03 berisi commit ini.
Fitur Baru
- Jenis nilai yang ditampilkan Peta bertingkat di fungsi DAO kini didukung di Room. (I13f48, 203008711)
Perubahan API
- Anotasi jenis baru bernama
@MapColumn
telah dibuat untuk menggantikan@MapInfo
, yang sekarang tidak digunakan lagi. Untuk setiap nama kolom (keyColumnName
,valueColumnName
, atau keduanya) yang disediakan dalam anotasi@MapInfo
, Anda harus mendeklarasikan anotasi@MapColumn
hanya dengancolumnName
dan menggunakan anotasi pada argumen jenis tertentu yang direferensikan (kunci atau nilai Peta) dalam jenis nilai yang ditampilkan fungsi DAO. Hal ini karena anotasi@MapColumn
digunakan langsung pada argumen jenis dalam jenis nilai yang ditampilkan fungsi DAO, bukan pada fungsi itu sendiri seperti@MapInfo
. Untuk informasi selengkapnya, baca dokumentasi@MapColumn
. (Ib0305, b/203008711) - Memperbarui file API untuk menganotasi penyembunyian kompatibilitas (I8e87a, b/287516207)
- API plugin Room Gradle telah diupdate agar tidak selalu memerlukan konfigurasi per varian. Artinya, plugin dapat menerima lokasi global untuk semua varian tanpa membuat beberapa direktori, sehingga memungkinkan migrasi lebih lancar tetapi juga cukup fleksibel untuk mengonfigurasi ragam atau skema jenis build secara manual sambil tetap mempertahankan manfaat plugin (build yang dapat direproduksi dan di-cache). (I09d6f, b/278266663)
Perbaikan Bug
- Memperbaiki potensi kerentanan kebocoran memori di
QueryInterceptorStatement
. (I193d1) - Memperbaiki perilaku yang salah dalam fungsi
QueryInterceptorDatabase execSQL()
. (Iefdc8)
Versi 2.6.0-alpha02
21 Juni 2023
androidx.room:room-*:2.6.0-alpha02
dirilis. Versi 2.6.0-alpha02 berisi commit ini.
Plugin Room Gradle
Rilis baru ini berisi artefak baru untuk Plugin Room Gradle dengan ID androidx.room
, yang memecahkan berbagai masalah yang ada di Room terkait memiliki input dan output skema melalui opsi pemroses anotasi Gradle. Plugin Room Gradle mengonfigurasi project sedemikian rupa sehingga skema yang dihasilkan yang digunakan untuk migrasi otomatis dan merupakan output tugas kompilasi dikonfigurasi dengan benar agar memiliki build yang dapat direproduksi dan di-cache. Plugin ini menawarkan DSL untuk mengonfigurasi lokasi skema dasar:
room {
schemaDirectory("$projectDir/schemas/")
}
Plugin ini kemudian akan mengonfigurasi compiler Room dan berbagai tugas kompilasi serta backend-nya (javac, KAPT, KSP) untuk menghasilkan file skema ke dalam folder yang sesuai, yaitu schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Seperti biasa, file ini check in ke repositori untuk digunakan untuk validasi dan migrasi otomatis. Setelah bermigrasi menggunakan plugin, bukan opsi pemroses anotasi, file skema yang ada harus disalin ke direktori ragam yang dihasilkan yang dibuat oleh plugin. Ini adalah operasi migrasi satu kali yang harus dilakukan secara manual. Dokumentasi skema di developers.android.com akan diperbarui di masa mendatang setelah masukan diatasi dan plugin mencapai stabil, jadi cobalah.
Perubahan API
RoomDatabase.QueryCallback
telah didefinisikan sebagai antarmuka fungsional yang memungkinkan penggunaan konversi SAM. (Iab8ea, b/281008549)
Perbaikan Bug
- Menyelesaikan masalah yang timbul saat membuat instance database di Robolectric setelah migrasi sumber Room dari Java ke Kotlin. (Ic053c, b/274924903)
Versi 2.6.0-alpha01
22 Maret 2023
androidx.room:room-*:2.6.0-alpha01
dirilis. Versi 2.6.0-alpha01 berisi commit berikut.
Fitur Baru
- Mendukung class nilai di Room untuk KSP. Room kini dapat mendukung class nilai dalam Entity. (4194095)
- Pembuatan kode Kotlin(atau “Kotlin CodeGen”) kini dapat diaktifkan di Room (4297ec0). Untuk mengaktifkan CodeGen Kotlin di Room, tambahkan nama opsi
room.generateKotlin
ke opsi prosesor untuk KSP. Untuk detail selengkapnya tentang cara meneruskan opsi pemroses untuk KSP, lihat dokumentasi KSP.
Catatan: Saat menggunakan CodeGen Kotlin, penting untuk diperhatikan bahwa ada batasan tambahan yang telah ditambahkan. Properti abstrak sebagai pengambil DAO atau kueri DAO di CodeGen Kotlin tidak diizinkan, dan diharapkan dapat ditulis ulang sebagai fungsi untuk menghindari anggapan palsu bahwa nilai properti tidak dapat diubah dan memiliki hasil tersimpan yang tetap. Batasan lain yang telah ditambahkan adalah bahwa jenis nilai yang ditampilkan koleksi Nullable tidak lagi diizinkan di Room untuk CodeGen Kotlin.
Peringatan: Anda mungkin mendapati bahwa project Anda lebih ketat dalam hal nullability saat menggunakan CodeGen Kotlin. Di CodeGen Kotlin, nullability argumen jenis itu penting, meskipun di Java hal ini sebagian besar diabaikan. Misalnya, Anda memiliki jenis nilai yang ditampilkan `Flow<foo\>` dan tabel kosong. Di Java CodeGen, ini tidak akan menyebabkan masalah apa pun, tetapi di CodeGen Kotlin, Anda akan mendapatkan error. Untuk menghindari hal ini, Anda harus menggunakan `Flow<foo?\>`, dengan asumsi null dimunculkan. </foo?\></foo\>
Perubahan API
- Melindungi dari penggunaan koleksi nullable yang tidak bermakna dalam jenis nilai yang ditampilkan metode DAO. (I777dc, b/253271782, b/259426907)
- Menambahkan API untuk membuat Flow yang memunculkan perubahan pelacak pembatalan. API ini berguna untuk membuat aliran data yang perlu bereaksi terhadap perubahan database. (I8c790, b/252899305)
Perbaikan Bug
- Larang properti abstrak sebagai pengambil DAO atau kueri DAO di codegen Kotlin. Sebagai gantinya, properti tersebut harus ditulis ulang sebagai fungsi untuk menghindari anggapan palsu bahwa nilai properti tidak dapat diubah dan memiliki hasil tersimpan yang tetap. (If6a13, b/127483380, b/257967987)
Versi 2.5.2
Versi 2.5.2
21 Juni 2023
androidx.room:room-*:2.5.2
dirilis. Versi 2.5.2 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah inkompatibilitas dengan kotlinx-metadata-jvm. (386d5c)
- Memperbaiki masalah yang menyebabkan Room menampilkan error saat digunakan dalam uji Robolectric. (f79bea, b/274924903)
Versi 2.5.1
Versi 2.5.1
22 Maret 2023
androidx.room:room-*:2.5.1
dirilis. Versi 2.5.1 berisi commit ini.
Perbaikan Bug
- Hindari memeriksa direktori induk database di
FrameworkSQLiteHelper
jika database sudah terbuka. (5de86b8) - Gunakan pemeriksaan
isOpenInternal
saat memeriksa apakah database sudah terbuka. (e91fb35) - Penanganan kasus reentrant yang lebih baik di
acquireTransactionThread()
Room kini tersedia. (219f98b). Selama transaksi yang ditangguhkan, Room menggunakan thread dari eksekutor transaksi, memulai loop peristiwa di dalamnya, dan mengirimkan operasi database yang ditangguhkan ke eksekutor tersebut, sehingga semua dienkapsulasi dalam coroutine transaksi. Biasanya diharapkan bahwa thread transaksi berbeda dari yang memulai transaksi, tetapi dalam beberapa kasus keduanya sama. Untuk menangani kasus reentrant tersebut,withTransaction()
telah difaktorkan ulang agar tidak lagi bergantung pada tugas kontrol dan sebagai gantinya akan menjalankan blok transaksi yang ditangguhkan dari dalamrunBlocking
di thread transaksi.
Versi 2.5.0
Versi 2.5.0
22 Februari 2023
androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
, dan androidx.room:room-paging-rxjava3:2.5.0
dirilis. Versi 2.5.0 berisi commit ini.
Versi 2.5.0
11 Januari 2023
androidx.room:room-*:2.5.0
dirilis. Versi 2.5.0 berisi commit ini.
Perubahan penting sejak versi 2.4.0
- Semua sumber
room-runtime
telah dikonversi dari Java ke Kotlin. Perhatikan bahwa Anda mungkin mengalami masalah inkompatibilitas sumber jika kode Anda berada di Kotlin karena konversi library ke Kotlin. Misalnya, perubahan yang tidak kompatibel dengan sumber yang diketahui terjadi ketika diInvalidationTracker
Anda harus mendeklarasikanonInvalidate()
dalamObserver
agar memiliki jenis parameterSet
dan bukanMutableSet
. Selain itu, metode pengambil tertentu dikonversi menjadi properti yang memerlukan sintaksis akses properti pada file Kotlin. Laporkan bug jika ada inkompatibilitas yang signifikan. - Menambahkan anotasi pintasan baru,
@Upsert
, yang mencoba menyisipkan entity saat tidak ada konflik keunikan atau mengupdate entity jika ada konflik. (I7aaab, b/241964353) - Artefak room-paging baru
room-paging-rxjava2
,room-paging-rxjava3
, danroom-paging-guava
telah ditambahkan untuk dukungan di Paging Room. - Menambahkan API untuk memberikan nama tabel nilai dan kunci untuk disambiguasi di
@MapInfo
(Icc4b5)
Versi 2.5.0-rc01
7 Desember 2022
androidx.room:room-*:2.5.0-rc01
dirilis. Versi 2.5.0-rc01 berisi commit ini.
- Rilis ini sama persis dengan
2.5.0-beta02
.
Versi 2.5.0-beta02
9 November 2022
androidx.room:room-*:2.5.0-beta02
dirilis. Versi 2.5.0-beta02 berisi commit ini.
Perubahan API
- Memperbaiki berbagai API yang menggunakan argumen kueri dari invarian (
Array<Any?>
) hingga kontravarian (Array<out Any?>
) agar cocok dengan perilaku array Java. (b/253531073)
Versi 2.5.0-beta01
5 Oktober 2022
androidx.room:room-*:2.5.0-beta01
dirilis. Versi 2.5.0-beta01 berisi commit ini.
Perubahan API
- Membatasi versi minimum yang mendukung
@Upsert
menjadi API 16. Hal ini disebabkan oleh ketidakmampuan untuk mengidentifikasi konflik batasan kunci utama di API lama. (I5f67f, b/243039555)
Perbaikan Bug
- Memperbaiki masalah saat tabel bayangan yang salah diekspor ke file skema
.json
sehingga merusaknya. (I4f83b, b/246751839)
Versi 2.5.0-alpha03
24 Agustus 2022
androidx.room:room-*:2.5.0-alpha03
dirilis. Versi 2.5.0-alpha03 berisi commit ini.
Fitur Baru
- Menambahkan anotasi pintasan baru,
@Upsert
, yang mencoba menyisipkan entity saat tidak ada konflik keunikan atau mengupdate entity jika ada konflik. (I7aaab, b/241964353)
Perbaikan Bug
- Room sekarang akan menampilkan
SQLiteConstraintException
, bukanIllegalStateException
, selama pemeriksaan batasan kunci asing untuk migrasi otomatis. (I328dd) - Memperbaiki perubahan sumber Kotlin yang tidak kompatibel untuk pengambil/properti
getOpenHelper
,getQueryExecutor
, dangetTransactionExecutor
. (Iad0ac)
Versi 2.5.0-alpha02
1 Juni 2022
androidx.room:room-*:2.5.0-alpha02
dirilis. Versi 2.5.0-alpha02 berisi commit berikut ini.
Fitur Baru
- Artefak
room-paging
baruroom-paging-rxjava2
,room-paging-rxjava3
, danroom-paging-guava
telah ditambahkan untuk dukungan dalam Paging Room.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/20636{/166)
Perubahan API
- Semua
room-runtime
telah dikonversi dari Java ke Kotlin.Catatan: Anda mungkin mengalami masalah inkompatibilitas sumber karena konversi library ke Kotlin. Jika kode Anda berada di Kotlin dan memanggil Room versi lama, versi baru harus menangani kasus ini. Misalnya, perubahan yang tidak kompatibel dengan sumber yang diketahui terjadi ketika di
InvalidationTracker
Anda harus mendeklarasikanonInvalidate()
dalamObserver
agar memiliki jenis parameterSet
dan bukanMutableSet
. - Menambahkan API untuk memberikan nama tabel nilai dan kunci untuk disambiguasi di
@MapInfo
(Icc4b5) - Memperbaiki masalah kompatibilitas sumber untuk mengizinkan kembali
@Ignore
di pengambil properti. (Ifc2fb)
Perbaikan Bug
- Menduplikasi algoritme heuristik resolusi kolom. Room sekarang akan mencoba menyelesaikan kolom ambigu dalam kueri multimap. Hal ini memungkinkan JOIN dengan tabel yang berisi tabel dengan nama yang sama agar dipetakan ke objek data hasil dengan benar. (I4b444, b/201306012, b/212279118)
Versi 2.5.0-alpha01
23 Februari 2022
androidx.room:room-*:2.5.0-alpha01
dirilis. Versi 2.5.0-alpha01 berisi commit ini.
Perubahan API
- Memperbaiki masalah saat penggunaan
@IntDef
Room tidak diterapkan di sumber Kotlin. (I75f41, b/217951311) - Memperbaiki masalah kompatibilitas sumber untuk mengizinkan kembali
@Query
di pengambil properti. (I0a09b) - Room-common dikonversi dari Java ke Kotlin. (I69c48, b/206858235)
Catatan: Anda mungkin mengalami masalah inkompatibilitas sumber karena beberapa properti telah dipindahkan ke objek pendamping selama konversi library ke Kotlin. Jika kode Anda berada di Kotlin dan memanggil Room versi lama, versi baru akan memerlukan akhiran ".Companion" saat mengakses properti ini.
- Room-migration dikonversi dari Java ke Kotlin. (I2724b, b/206858622)
- File
paging
terkait dikonversi diroom-runtime
dari Java ke Kotlin. (I82fc8, b/206859668) - Menambahkan API untuk kunci dan penggunaan multi-proses di level FrameworkSQLite*, untuk melindungi pembuatan dan migrasi database multi-proses untuk pertama kalinya. (Ied267, b/193182592)
Perbaikan Bug
- Menambahkan dukungan untuk properti internal di sumber Kotlin.
Ini merupakan sedikit perubahan perilaku di Room, yaitu Room akan menggunakan nama
sumber fungsi saat mencocokkannya dengan properti sebagai pengambil/penyetel
(sebelumnya menggunakan nama fungsi JVM yang berbeda
untuk fungsi/properti internal).
Jika Anda menggunakan anotasi
@JvmName
kustom untuk mencocokkan pengambil/penyetel ke properti pribadi, harap periksa kembali kode yang dihasilkan setelah update (If6531, b/205289020)
Versi 2.4.3
Versi 2.4.3
27 Juli 2022
androidx.room:room-*:2.4.3
dirilis. Versi 2.4.3 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah yang akan menyebabkan Room tidak mengenali fungsi penangguhan di Kotlin 1.7 (b/236612358)
Versi 2.4.2
Versi 2.4.2
23 Februari 2022
androidx.room:room-*:2.4.2
dirilis. Versi 2.4.2 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah yang menghasilkan kode untuk fungsi penangguhan
@Transaction
Dao dengan body yang menghasilkan metode antarmuka default karena kompilasi dengan-Xjvm-default=all
atau yang setara. (Ia4ce5) - Mengatasi bug yang membuat Room menghasilkan kode untuk metode kueri jenis nilai
Array<ByteArray>
yang ditampilkan. (If086e, b/213789489)
Versi 2.4.1
Versi 2.4.1
12 Januari 2022
androidx.room:room-*:2.4.1
dirilis. Versi 2.4.1 berisi commit ini.
Perbaikan Bug
- Menambahkan dukungan untuk properti internal di sumber Kotlin.
Ini merupakan sedikit perubahan perilaku di Room, yaitu Room akan menggunakan nama
sumber fungsi saat mencocokkannya dengan properti sebagai pengambil/penyetel
(sebelumnya menggunakan nama fungsi JVM yang berbeda
untuk fungsi/properti internal).
Jika Anda menggunakan anotasi
@JvmName
kustom untuk mencocokkan pengambil/penyetel ke properti pribadi, harap periksa kembali kode yang dihasilkan setelah update (If6531, b/205289020)
Versi 2.4.0
Versi 2.4.0
15 Desember 2021
androidx.room:room-*:2.4.0
dirilis. Versi 2.4.0 berisi commit ini.
Perubahan penting sejak versi 2.3.0
- Migrasi Otomatis: Room kini menawarkan API untuk otomatis melakukan migrasi selama skema diekspor. Untuk memberi tahu Room bahwa Room harus melakukan migrasi otomatis, properti
@Database#autoMigrations
baru dapat digunakan untuk mendeklarasikan dari dan ke versi apa migrasi otomatis akan dilakukan. Jika Room memerlukan informasi tambahan terkait penggantian nama atau penghapusan tabel dan kolom, anotasi@AutoMigration
akan dapat mendeklarasikan class spesifikasi yang berisi input tersebut. Lihat dokumentasi@AutoMigration
untuk detail selengkapnya. - Injeksi Dependensi di Migrasi Otomatis:
@ProvidedAutoMigrationSpec
adalah API baru untuk mendeklarasikan bahwaAutoMigrationSpec
akan disediakan pada runtime melaluiRoomDatabase.Builder#addAutoMigrationSpec()
. Hal ini memungkinkan framework injeksi dependensi untuk memberikan spesifikasi tersebut saat memerlukan dependensi yang kompleks. - Dukungan Pemandu Pengujian Migrasi untuk Migrasi Otomatis:
MigrationTestHelper
Room telah diperbarui untuk mendukung migrasi otomatis dengan menyediakan API konstruktor baru yang menerima class database yang sedang diuji. Hal ini memungkinkan fungsi bantuan menambahkan migrasi otomatis dengan cara yang sama selamarunMigrationsAndValidate
. - Dukungan Paging-Room:
androidx.room:room-paging
dirilis, memberikan dukungan Paging 3.0 native untuk kueri Room yang menampilkanandroidx.paging.PagingSource
. - Metode Kueri Relasional: Room kini mendukung metode
@Dao
dengan multimap sebagai jenis nilai yang ditampilkan, berguna untuk pernyataan JOIN. Jenis multimap yang didukung adalahMap
,SparseArray
,LongSparseArray
, besertaImmutableMap
,ImmutableSetMultimap
danImmutableListMultimap
Guava.
Versi 2.4.0-rc01
1 Desember 2021
androidx.room:room-*:2.4.0-rc01
dirilis. Versi 2.4.0-rc01 berisi commit ini.
Fitur Baru
- Memperbarui dependensi Room pada KSP menjadi
1.6.0-1.0.1
untuk mendukung Kotlin 1.6
Versi 2.4.0-beta02
17 November 2021
androidx.room:room-*:2.4.0-beta02
dirilis. Versi 2.4.0-beta02 berisi commit ini.
Fitur Baru
- Kami telah menambahkan dukungan untuk SparseArray dan LongSparseArray di @MapInfo. (Ic91a2b/138910317)
Perbaikan Bug
- Kami telah menambahkan penganalisis TypeConverter baru yang memperhitungkan informasi nullability sesuai jenisnya. Karena hanya tersedia di KSP, informasi ini akan diaktifkan secara default hanya di KSP. Jika menyebabkan masalah, Anda dapat menonaktifkannya dengan meneruskan room.useNullAwareTypeAnalysis=false ke pemroses anotasi. Jika demikian, harap laporkan bug yang kemudian akan ditandai untuk dihapus di masa mendatang. Dengan penganalisis TypeConverter baru ini, sebaiknya Anda hanya memberikan TypeConverter penerima non-null karena penganalisis baru memiliki kemampuan untuk menggabungkannya dengan pemeriksaan null. Perhatikan bahwa hal ini tidak berdampak bagi pengguna yang menggunakan KAPT atau Java sebagai pemroses anotasi (tidak seperti KSP), tidak memiliki informasi nullability sesuai jenisnya. (Ia88f9, b/193437407)
- Memperbaiki bug saat Room akan gagal mengompilasi dengan error SQL ketika entity FTS dideklarasikan akan menggunakan tokenizer ICU. (I00db9, b/201753224)
- Menyelesaikan masalah migrasi otomatis terkait kolom baru yang ditambahkan ke Entity yang disematkan di antara versi. (I5fcb1b/193798291)
- Kami telah menyelesaikan masalah terkait jenis nilai yang ditampilkan metode kueri relasional di kueri LEFT JOIN. Melalui perubahan ini, jika terdapat pemetaan 1-banyak, koleksi yang ditampilkan untuk kunci tidak akan menyertakan objek nilai yang tidak valid saat tidak ditemukan di kursor. Jika tidak ditemukan nilai yang valid, kunci akan dipetakan ke koleksi kosong. (Id5552b/201946438)
- Menyelesaikan masalah migrasi otomatis untuk kata kunci SQLite yang gagal di-escape dalam nama kolom. (Idbed4b/197133152)
Versi 2.4.0-beta01
13 Oktober 2021
androidx.room:room-*:2.4.0-beta01
dirilis. Versi 2.4.0-beta01 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah dengan migrasi otomatis yang tidak menambahkan kolom baru saat tabel lain dalam migrasi otomatis juga memiliki kolom baru dengan nama yang sama. (Ia5db5, b/200818663)
- Implementasi PagingSource yang dihasilkan oleh room-paging kini
menggunakan
queryExecutor
yang diteruskan keRoomDatabase.Builder
, sehingga dapat diganti, bukanDispatchers.IO
sebelumnya. (Iae259)
Versi 2.4.0-alpha05
29 September 2021
androidx.room:room-*:2.4.0-alpha05
dirilis. Versi 2.4.0-alpha05 berisi commit ini.
Fitur Baru
- Menambahkan pengonversi jenis bawaan untuk UUID. (I671e8, b/73132006)
Perubahan API
Menambahkan properti baru ke anotasi TypeConverters agar developer dapat menonaktifkan pengonversi Enum dan UUID bawaan. Pengonversi ini aktif secara default, tetapi Anda dapat menonaktifkannya untuk cakupan tertentu, atau untuk seluruh database. Lihat dokumentasi TypeConverters untuk detailnya. (36ae9e, b/195413406)
Mendukung kunci/nilai non-POJO untuk jenis nilai yang ditampilkan Multimap dalam DAO melalui anotasi
@MapInfo
. (I4d704)
@MapInfo
akan diperlukan jika kolom kunci atau nilai pada peta berasal dari satu kolom. Lihat contoh:
@MapInfo(valueColumn = "songCount")
@Query("""
SELECT *, COUNT(mSongId) as songCount
FROM Artist JOIN Song ON Artist.artistName = Song.artist
GROUP BY artistName
""")
fun getArtistAndSongCounts(): Map<Artist, Integer>
- Membuat
room-paging
menjadi artefak yang diperlukan saat menggunakan Paging3 dengan Room. (Ieaffe)
Perbaikan Bug
- Memperbaiki masalah saat hasil kueri multimap tidak diurutkan dengan benar ketika kueri berisi klausa kolom ORDER BY dari kunci peta. (I6b887)
Kontribusi Eksternal
- Menambahkan API baru untuk menentukan urutan indeks di @Index. Terima kasih kepada Nikita Zhelonkin. (I033fc)
Versi 2.4.0-alpha04
21 Juli 2021
androidx.room:room-*:2.4.0-alpha04
dirilis. Versi 2.4.0-alpha04 berisi commit ini.
Fitur Baru
Room kini mendukung metode
@Dao
jenis nilai yang ditampilkan multimap, berguna untuk pernyataan JOIN. Jenis multimap yang didukung adalahMap
besertaImmutableMap
,ImmutableSetMultimap
, danImmutableListMultimap
Guava.Berikut adalah contoh kueri multimap:
Peta Relasi One-to-One
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Peta Relasi One-to-Many (Multimap standar)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
Hasil multimap juga dapat digabungkan dalam jenis nilai asinkron yang didukung, seperti
LiveData
,Observable
Rx, atau coroutineFlow
.
Paging Room
androidx.room:room-paging
dirilis, memberikan dukungan Paging 3.0 native untuk kueri Room yang menampilkanandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Artefak ini menggantikan implementasi
androidx.paging.PagingSource
yang dihasilkan oleh Room dengan yang di-build berdasarkan API Paging 3.0. Implementasi PagingSource yang baru mengurai kunci dengan cara yang berbeda, sehingga setiap kunci yang diberikan secara manual ke PagingSource Room perlu memperhitungkan perubahan perilaku ini, termasuk initialKey yang diteruskan melalui konstruktor Pager. Halaman akan mulai dimuat dariKey
denganKey
menjadi item yang pertama dimuat. Tindakan ini menyimpang dari perilaku yang ada, tempatLoadParams.Refresh.Key
diperlakukan sebagai posisi scroll pengguna dan item dimuat sebelum dan sesudah kunci.Artefak ini bersifat opsional dan memilih tidak ikut akan melakukan fallback ke dukungan yang ada untuk Paging 3.0 yang diperkenalkan dalam Room 2.3. Namun, artefak ini akan menjadi non-opsional di rilis mendatang bagi mereka yang menggunakan Room dengan Paging 3.0. Untuk ikut serta, tambahkan artefak paging room baru ke classpath Anda. Jika menggunakan Gradle, Anda dapat menambahkan cuplikan berikut ke build.gradle Anda:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Perbaikan Bug
- Memperbaiki masalah dalam migrasi otomatis terkait penanganan pelanggaran kunci asing. (b/190113935)
Versi 2.4.0-alpha03
16 Juni 2021
androidx.room:room-*:2.4.0-alpha03
dirilis. Versi 2.4.0-alpha03 berisi commit ini.
Perubahan API
- Mengupdate
MigrationTestHelper
Room untuk mendukung migrasi otomatis dengan menyediakan API konstruktor baru yang menerima class database yang sedang diuji. Hal ini memungkinkan fungsi bantuan menambahkan migrasi otomatis dengan cara yang sama selamarunMigrationsAndValidate
.
Perbaikan Bug
Memperbaiki masalah library native SQLite Room untuk mendukung chip M1 Apple. (b/174695268
Memperbaiki masalah jika Room tidak akan error saat jenis pengembalian fungsi @Transaction adalah Alur (I56ddd, b/190075899)
Perbaiki masalah di migrasi otomatis terkait indeks. b/177673291
Update Dependensi
- Dukungan KSP Room sekarang bergantung pada KSP
1.5.10-1.0.0-beta01
. (1ecb11, b/160322705)
Versi 2.4.0-alpha02
5 Mei 2021
androidx.room:room-*:2.4.0-alpha02
dirilis. Versi 2.4.0-alpha02 berisi commit ini.
Perubahan API
@ProvidedAutoMigrationSpec
adalah API baru untuk mendeklarasikan bahwaAutoMigrationSpec
akan disediakan pada runtime melaluiRoomDatabase.Builder#addAutoMigrationSpec()
. Hal ini memungkinkan framework injeksi dependensi untuk memberikan spesifikasi tersebut saat memerlukan dependensi yang kompleks.
Perbaikan Bug
- Memperbaiki masalah migrasi otomatis saat
@DatabaseView
tidak dibuat ulang dengan benar.
Kontribusi Eksternal
- Memperbaiki masalah di
JournalMode.TRUNCATE
Room saat callbackInvalidationTracker
terkadang dipanggil secara tidak valid, terlambat, atau tidak ada sama sekali. BerkatUli Bubenheimer | [email protected]
(b/154040286)
Versi 2.4.0-alpha01
21 April 2021
androidx.room:room-*:2.4.0-alpha01
dirilis. Versi 2.4.0-alpha01 berisi commit ini.
Fitur Baru
- Migrasi Otomatis: Room kini menawarkan API untuk otomatis melakukan migrasi selama skema diekspor. Untuk memberi tahu Room bahwa Room harus melakukan migrasi otomatis, properti
@Database#autoMigrations
baru dapat digunakan untuk mendeklarasikan dari dan ke versi apa migrasi otomatis akan dilakukan. Jika Room memerlukan informasi tambahan terkait penggantian nama atau penghapusan tabel dan kolom, anotasi@AutoMigration
akan dapat mendeklarasikan class spesifikasi yang berisi input tersebut. Lihat dokumentasi@AutoMigration
untuk detail selengkapnya.
Perbaikan Bug
- Memperbaiki masalah saat
defaultValue
dengan tanda kurung tambahan salah divalidasi oleh validasi skema Room. b/182284899
Versi 2.3.0
Versi 2.3.0
21 April 2021
androidx.room:room-*:2.3.0
dirilis. Versi 2.3.0 berisi commit ini.
Perubahan penting sejak versi 2.2.0
- Dukungan Enum Bawaan: Room kini akan ditetapkan secara default untuk menggunakan pengonversi jenis Enum ke String dan sebaliknya, jika tidak ada yang disediakan. Jika pengonversi jenis untuk enum sudah ada, Room akan memprioritaskan penggunaannya daripada pengonversi default.
- Callback Kueri: Room kini menawarkan Callback API umum RoomDatabase.QueryCallback, untuk saat kueri akan dijalankan, yang dapat berguna untuk logging di build debug. Callback dapat disetel melalui
RoomDatabase.Builder#setQueryCallback()
. - Peningkatan dalam Bentuk Paket: Room kini memiliki API untuk membuat database menggunakan database dalam bentuk paket yang dibaca dari stream input. Hal ini memungkinkan terjadinya kasus seperti saat database dalam bentuk paket dikompresi ke format gzip.
- Pengonversi Jenis yang Disediakan: Room kini memiliki API untuk menyediakan instance pengonversi jenis sehingga aplikasi dapat mengontrol inisialisasinya. Untuk menandai pengonversi jenis yang akan disediakan ke Room, gunakan anotasi baru @ProvidedTypeConverter.
- Dukungan RxJava3: Room kini mendukung jenis RxJava3. Serupa dengan RxJava2, Anda dapat mendeklarasikan metode DAO yang jenis nilai yang ditampilkannya adalah Flowable, Single, Maybe, dan Completable. Selain itu, artefak baru
androidx.room:room-rxjava3
juga tersedia untuk mendukung RxJava3. - Dukungan Paging 3.0: Room kini akan mendukung pembuatan implementasi untuk metode
@Query
yang dianotasi yang jenis nilai yang ditampilkannya adalahandroidx.paging.PagingSource
.
Versi 2.3.0-rc01
24 Maret 2021
androidx.room:room-*:2.3.0-rc01
dirilis. Versi 2.3.0-rc01 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah yang mencegah kueri Coroutine Flow yang dibuat oleh Room untuk digunakan di blok
withTransaction
yang ditangguhkan. (I797bf)
Versi 2.3.0-beta03
10 Maret 2021
androidx.room:room-*:2.3.0-beta03
dirilis. Versi 2.3.0-beta03 berisi commit ini.
Fitur Baru
- Menambahkan dukungan kompilasi inkremental untuk KSP. (I031c1, b/176453350)
Perbaikan Bug
- Memperbaiki bug tempat membuat PagingSource di thread utama dapat memicu ANR. (I42b74, b/181221318)
- Memperbaiki visibilitas
@ExperimentalRoomApi
menjadi publik, bukan paket pribadi. (b/181356119)
Kontribusi Eksternal
- Mengizinkan Room untuk menerima jenis nilai POJO yang ditampilkan dalam metode DAO beranotasi
@Query
saat juga dianotasi dengan@SkipQueryVerification
. Room akan melakukan upaya terbaik untuk mengonversi hasil kueri ke jenis pengembalian POJO dengan cara yang sama seperti yang dilakukan untuk metode DAO beranotasi@RawQuery
. Terima kasih kepada ‘Markus Riegel | [email protected]’. (I45acb)
Versi 2.3.0-beta02
18 Februari 2021
androidx.room:room-*:2.3.0-beta02
dirilis. Versi 2.3.0-beta02 berisi commit ini.
Fitur Baru
Room sekarang memiliki dukungan eksperimental untuk Pemrosesan Simbol Kotlin (KSP).
KSP adalah pengganti KAPT untuk menjalankan pemroses anotasi secara native di compiler Kotlin, sehingga mengurangi waktu build secara signifikan.
Untuk menggunakan Room dengan KSP, Anda dapat menerapkan plugin Gradle KSP dan mengganti konfigurasi
kapt
di file build Anda denganksp
. Misalnya, gunakanksp 'androidx.room:room-compiler:2.3.0-beta02'
, bukankapt 'androidx.room:room-compiler:2.3.0-beta02'
. Lihat dokumentasi KSP untuk detail selengkapnya.Perhatikan bahwa sebaiknya tetap gunakan KAPT untuk kode produksi karena KSP bersifat eksperimental. Pengurangan waktu build hanya berlaku jika tidak ada prosesor lain yang menggunakan KAPT. Lihat b/160322705 untuk masalah umum.
Versi 2.3.0-beta01
27 Januari 2021
androidx.room:room-*:2.3.0-beta01
dirilis. Versi 2.3.0-beta01 berisi commit ini.
Fitur Baru
- Database yang Ditutup Secara Otomatis: Room kini memiliki kemampuan untuk menutup database yang tidak diakses setelah jangka waktu tertentu. Ini adalah fitur eksperimental yang dapat diaktifkan dengan memanggil
RoomDatabase.Builder#setAutoCloseTimeout()
. Fitur ini berguna untuk aplikasi dengan beberapa database.
Perbaikan Bug
- Memperbaiki masalah agar metode DAO dengan beberapa metode
@Update
atau@Delete
yang memiliki strategi konflik yang berbeda akan menghasilkan kode dengan salah satu strategi saja, secara efektif mengabaikan yang satunya. (/I0b90d, b/176138543)
Versi 2.3.0-alpha04
16 Desember 2020
androidx.room:room-*:2.3.0-alpha04
dirilis. Versi 2.3.0-alpha04 berisi commit ini.
Fitur Baru
- Room sekarang menawarkan Callback API umum
RoomDatabase.QueryCallback
, saat kueri akan dijalankan nantinya, yang dapat berguna untuk logging di build debug. Callback dapat disetel melaluiRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Room sekarang akan ditetapkan secara default untuk menggunakan pengonversi jenis Enum ke String dan sebaliknya, jika tidak ada yang disediakan. Jika pengonversi jenis untuk enum sudah ada, Room akan memprioritaskan penggunaannya daripada pengonversi default. (b/73132006)
Masalah Umum
- Jika pengonversi jenis satu arah untuk pembacaan sudah ada untuk Enum, Room mungkin tidak sengaja menggunakan pengonversi String ke Enum bawaan yang mungkin tidak diinginkan. Ini adalah masalah umum dan dapat diperbaiki dengan menjadikannya pengonversi dua arah. Lihat b/175707691.
Perbaikan Bug
- Memperbaiki masalah saat Room akan menonaktifkan pemrosesan anotasi inkremental secara tidak tepat di versi JDK yang lebih baru. (b/171387388)
- Memperbaiki masalah terkait Room yang menemukan class yang dihasilkan ketika beberapa loader class digunakan. Terima kasih atas perbaikannya ‘Serendipity | [email protected]’. (b/170141113)
- Memperbaiki masalah saat Room akan menghasilkan kode yang salah ketika
@Dao
Kotlin memiliki class dasar yang generiknya adalah primitif di JVM. (b/160258066)
Kontribusi Eksternal
- Room sekarang akan menggunakan
beginTransactionNonExclusive
secara default jika mode WAL diaktifkan dan API adalah 16 atau lebih. Terima kasih kepada ‘Ahmed I. Khalil | [email protected]’. (b/126258791)
Versi 2.3.0-alpha03
14 Oktober 2020
androidx.room:room-*:2.3.0-alpha03
dirilis. Versi 2.3.0-alpha03 berisi commit ini.
Fitur Baru
Room kini memiliki API untuk menyediakan instance pengonversi jenis sehingga aplikasi dapat mengontrol inisialisasinya. Untuk menandai pengonversi jenis yang akan disediakan ke Room, gunakan anotasi baru
@ProvidedTypeConverter
. Terima kasih kepada ‘mzgreen [email protected]’. (Ie4fa5, b/121067210)Room kini memiliki API untuk membuat database menggunakan database dalam bentuk paket yang dibaca dari stream input. Hal ini memungkinkan terjadinya kasus seperti saat database dalam bentuk paket dikompresi ke format gzip. Terima kasih kepada ‘Ahmed El-Helw [email protected]’ (3e6792, b/146911060)
Perubahan API
Menambahkan target yang hilang ke anotasi
@ForeignKey
untuk mencegah penggunaannya di luar anotasi@Entity
. (Iced1e)Kolom
mCallbacks
diRoomDatabase.java
kini disembunyikan. (d576cb, b/76109329)
Perbaikan Bug
Memperbarui dokumentasi TypeConverters untuk memperjelas bahwa TypeConverters hanya dapat digunakan untuk mengonversi kolom, bukan baris. (I07c56, b/77307836)
Mengupdate DaoProcessor untuk memperbaiki error compiler di Dao menggunakan jenis super generik dengan Kotlin "primitive". (Ice6bb, b/160258066)
Memperbarui dokumentasi metode observer add/remove untuk memperjelas threading (Ifd1d9, b/153948821)
Memperbaiki masalah pada Room yang salah memvalidasi tabel FTS yang mendeklarasikan kolom rowid-nya. (d62ebc, b/145858914)
Kontribusi Eksternal
Memperbaiki masalah lokal huruf besar/kecil terkait bahasa Turki (5746e3), b/68159494
Mengganti
ConcurrentHashMap
diRoomDatabase
denganCollections.synchronizedMap()
untuk menghindari masalah di Android Lollipop (d1cfc7, b/162431855)Menambahkan callback onOpenPrepackagedDatabase saat DB dalam bentuk paket disalin. (I1ba74, b/148934423)
Versi 2.3.0-alpha02
22 Juli 2020
androidx.room:room-*:2.3.0-alpha02
dirilis. Versi 2.3.0-alpha02 berisi commit ini.
Fitur Baru
- Dukungan RxJava3: Room kini mendukung jenis RxJava3. Serupa dengan RxJava2, Anda dapat mendeklarasikan metode DAO yang jenis nilai yang ditampilkannya adalah Flowable, Single, Maybe, dan Completable. Selain itu, artefak baru
androidx.room:room-rxjava3
juga tersedia untuk mendukung RxJava3. (b/152427884)
Perubahan API
- Mendeklarasikan
@TypeConverter
di class Objek Kotlin kini didukung. (b/151110764) - Opsi pemrosesan anotasi inkremental Room kini AKTIF secara default. (b/112110217)
Versi 2.3.0-alpha01
10 Juni 2020
androidx.room:room-*:2.3.0-alpha01
dirilis. Versi 2.3.0-alpha01 berisi commit ini.
Fitur Baru
Dukungan Paging 3.0: Room kini akan mendukung pembuatan implementasi untuk metode
@Query
yang dianotasi yang jenis nilai yang ditampilkannya adalahandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Perubahan API
@RewriteQueriesToDropUnusedColumns
adalah anotasi praktis baru yang membuat Room menulis ulang proyeksi '*' dalam sebuah kueri sehingga kolom yang tidak digunakan dalam hasil dihapus.- Opsi pemroses
room.expandProjection
kini tidak digunakan lagi. Gunakan@RewriteQueriesToDropUnusedColumns
sebagai pengganti untuk kueri pengoptimalan Room dengan proyeksi bintang. Perhatikan bahwa@RewriteQueriesToDropUnusedColumns
tidak menggantikan solusi konflik kolomroom.expandProjection
yang ditawarkan terkait dengan jenis nilai yang ditampilkan yang berisi kolom@Embedded
.
Perbaikan Bug
- Memperbaiki bug ketika Room tidak mendeteksi versi JDK dengan benar yang digunakan untuk mengaktifkan pemroses anotasi inkremental. Terima kasih kepada Blaz Solar ([email protected]) (b/155215201)
- Room kini menyematkan dependensi ANTLR-nya dengan pemroses anotasi untuk menghindari konflik versi dengan pemroses lain yang juga menggunakan ANTLR. (b/150106190)
Versi 2.2.6
Versi 2.2.6
16 Desember 2020
androidx.room:room-*:2.2.6
dirilis. Versi 2.2.6 berisi commit berikut ini.
Perbaikan Bug
- Memperbaiki masalah saat Room akan menonaktifkan pemrosesan anotasi inkremental secara tidak tepat di versi JDK yang lebih baru. (b/171387388)
Versi 2.2.5
Versi 2.2.5
18 Maret 2020
androidx.room:room-*:2.2.5
dirilis. Versi 2.2.5 berisi commit berikut.
Perbaikan Bug
- Menjadikan
MultiInstanceInvalidationService
directBootAware. Terima kasih ‘Mygod [email protected]’ (b/148240967) - Memperbaiki bug yang akan menyebabkan error saat pembatalan multi-instance diaktifkan dan database berisi entity FTS. (b/148969394)
- Memperbaiki masalah saat memuat library native SQLite di pemroses anotasi Room yang akan menyebabkan compiler error karena kompilasi paralel. (b/146217083)
Versi 2.2.4
Versi 2.2.4
19 Februari 2020
androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
, dan androidx.room:room-testing:2.2.4
dirilis. Versi 2.2.4 berisi commit berikut.
Perbaikan Bug
- Memperbaiki masalah terkait penangguhan transaksi yang akan mengalami deadlock jika coroutine dibatalkan dengan cepat sebelum transaksi benar-benar dimulai. (b/148181325)
- Memperbaiki masalah terkait @Generated yang digunakan dengan tidak benar saat membuat aplikasi dengan JDK 9. (b/146538330)
- Memperbaiki masalah saat Room menghasilkan kode yang salah bila antarmuka DAO di Kotlin memiliki fungsi konkret. (b/146825845)
Versi 2.2.3
Versi 2.2.3
18 Desember 2019
androidx.room:room-*:2.2.3
dirilis. Versi 2.2.3 berisi commit ini.
Perbaikan bug
- Memperbaiki bug saat Room gagal memvalidasi database yang tidak melalui migrasi dan berisi hash lama dengan indeks dalam skemanya. (b/139306173)
Versi 2.2.2
Versi 2.2.2
20 November 2019
androidx.room:room-*:2.2.2
dirilis. Versi 2.2.2 berisi commit ini.
Perbaikan bug
- Memperbaiki bug saat mengumpulkan hubungan one-to-one dengan lebih dari 999 baris akan menyebabkan Room menampilkan item terkait null. (b/143105450)
Versi 2.2.1
Versi 2.2.1
23 Oktober 2019
androidx.room:room-*:2.2.1
dirilis. Versi 2.2.1 berisi commit ini.
Perbaikan bug
- Memperbaiki bug saat Room salah memperingatkan tentang
CURSOR_MISMATCH
dengan opsi compilerexpandProjection
AKTIF. (b/140759491) - Menambahkan mekanisme coba lagi untuk menangani library native yang hilang, yang digunakan untuk memverifikasi kueri selama waktu kompilasi.
Versi 2.2.0
Versi 2.2.0
9 Oktober 2019
androidx.room:room-*:2.2.0
dirilis. Versi 2.2.0 berisi commit ini.
Perubahan penting sejak versi 2.1.0
- Database dalam Bentuk Paket: Dua API baru di
RoomDatabase.Builder
sekarang tersedia untuk membuatRoomDatabase
mengingat file database sudah terisi.createFromAsset()
digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkancreateFromFile()
digunakan jika file ini berada di sembarang lokasi. Penggunaan API ini mengubah perilaku migrasi destruktif sedemikian rupa sehingga selama migrasi fallback, Room akan mencoba menyalin ulang database yang terisi sebelumnya, jika tersedia. Jika tidak, Room akan melakukan fallback dengan menghilangkan dan membuat ulang semua tabel. b/62185732 - Nilai Default Skema:
@ColumnInfo
sekarang memilikidefaultValue
properti baru yang dapat digunakan untuk menentukan nilai default sebuah kolom. Nilai default adalah bagian dari skema database dan akan divalidasi selama migrasi, jika ditetapkan. b/64088772 - Relasi Many-to-Many:
@Relation
sekarang memiliki properti baruassociateBy
, yang menerima anotasi baru@Junction
, yang digunakan untuk mendeklarasikan relasi yang perlu dipenuhi melalui tabel junction (disebut juga tabel join). b/69201917 - Relasi One-to-One: Pembatasan pada kolom POJO yang dianotasikan dengan
@Relation
agar menjadi jenisList
atauSet
telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145 - Entity Target: Anotasi DAO
@Insert
,@Update
, dan@Delete
sekarang memiliki properti barutargetEntity
, yang memungkinkan penentuan tabel target yang dimaksudkan untuk ditindaklanjuti dengan metode DAO. Hal ini memungkinkan parameter metode DAO untuk menjadi POJO arbitrer yang akan ditafsirkan sebagai entity parsial. Dalam praktiknya, hal ini memungkinkan penyisipan, penghapusan, dan update parsial. b/127549506 - Coroutine Flow: Metode DAO
@Query
kini dapat berupa jenis nilai yang ditampilkanFlow<T>
. Flow yang ditampilkan akan memunculkan ulang kumpulan nilai baru jika tabel pengamatan dalam kueri dinyatakan tidak valid. Mendeklarasikan fungsi DAO dengan jenis nilai yang ditampilkanChannel<T>
merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakanFlow
, lalu menggunakan fungsi di dekatnya untuk mengonversiFlow
menjadiChannel
. b/130428884 - Pemroses Anotasi Inkremental Gradle: Room sekarang menjadi pemroses anotasi yang mengisolasi Gradle dan inkrementabilitas dapat diaktifkan melalui opsi pemroses
room.incremental
. Lihat Opsi Compiler Room untuk informasi selengkapnya. Jika Anda mengalami masalah, harap laporkan sebagai bug di sini. Kami berencana untuk mengaktifkan inkrementabilitas secara default pada versi stabil di waktu mendatang. b/112110217 - Memperluas Proyeksi :
room.expandProjection
opsi compiler eksperimental baru ditambahkan yang menyebabkan Room menulis ulang kueri dengan proyeksi bintang agar hanya memuat kolom dalam jenis nilai yang ditampilkan POJO. Misalnya, untuk metode DAO dengan@Query("SELECT * FROM Song")
yang menampilkan POJO bernamaSongIdAndTitle
yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut keSELECT id, title FROM Song
sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatanCURSOR_MISMATCH
yang ditampilkan saat kueri menampilkan kolom tambahan yang tidak cocok dengan kolom apa pun dalam jenis POJO yang ditampilkan.
Versi 2.2.0-rc01
5 September 2019
androidx.room:room:2.2.0-rc01
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Tidak ada perubahan publik sejak Room 2.2.0-beta01
.
Versi 2.2.0-beta01
22 Agustus 2019
androidx.room:room-*:2.2.0-beta01
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Perbaikan bug
- Memperbaiki bug saat kueri Coroutine Flow berhenti memunculkan kembali nilai baru setelah waktu tertentu. (b/139175786)
- Memperbaiki bug saat Room tidak menerima kode hash skema lama ketika membuka database yang tidak melakukan migrasi sejak Room 1.0, sehingga terjadi error runtime akibat skema yang tidak valid. (b/139306173)
Versi 2.2.0-alpha02
7 Agustus 2019
androidx.room:room-*:2.2.0-alpha02
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur Baru
- Coroutine Flow: Metode DAO
@Query
kini dapat berupa jenis nilai yang ditampilkanFlow<T>
. Flow yang ditampilkan akan memunculkan ulang kumpulan nilai baru jika tabel pengamatan dalam kueri dinyatakan tidak valid. Mendeklarasikan fungsi DAO dengan jenis nilai yang ditampilkanChannel<T>
merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakanFlow
, lalu menggunakan fungsi di dekatnya untuk mengonversiFlow
menjadiChannel
. b/130428884 - Memperluas Proyeksi :
room.expandProjection
opsi compiler eksperimental baru ditambahkan yang menyebabkan Room menulis ulang kueri dengan proyeksi bintang agar hanya memuat kolom dalam jenis nilai yang ditampilkan POJO. Misalnya, untuk metode DAO dengan@Query("SELECT * FROM Song")
yang menampilkan POJO bernamaSongIdAndTitle
yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut keSELECT id, title FROM Song
sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatanCURSOR_MISMATCH
yang ditampilkan saat kueri menampilkan kolom tambahan yang tidak cocok dengan kolom apa pun dalam jenis POJO yang ditampilkan. onDestructiveMigrate
adalah callback API baru yang ditambahkan keRoomDatabase.Callback
saat Room memigrasikan database secara destruktif. b/79962330
Perbaikan Bug
- Memperbaiki bug saat Room menghasilkan kode yang salah menggunakan metode sebagai penyetel kolom ketika kolom dilindungi. b/136194628
- Memperbaiki bug yang menyebabkan InvalidationTracker memunculkan NPE dalam proses kedua saat pembatalan multi-instance diaktifkan dan Layanan pembatalan dimatikan. b/137454915
- Memperbaiki bug saat Room tidak mengidentifikasi dengan benar jenis nilai yang ditampilkan dari
fungsi penangguhan turunan yang dianotasikan dengan
@RawQuery
. b/137878827 - Memperbarui kode yang dihasilkan untuk
@Relation
saat kunci penghubung berjenis BLOB untuk menggunakanByteBuffer
yang sebanding. b/137881998 - Memperbaiki bug saat Room melaporkan penyetel yang hilang di POJO yang digunakan sebagai parameter entity parsial untuk
@Insert
,@Update
, dan@Delete
. b/138664463 - Memperbaiki bug saat Room melaporkan penyetel & pengambil yang hilang untuk
kolom yang diabaikan melalui
@Entity
saat class entity tersebut digunakan dalam metode DAO tertentu. b/138238182 - Memperbaiki bug saat Room tidak mengonversi dengan benar argumen binding bernama menjadi argumen posisi, sehingga terjadi pengecualian runtime saat kueri dijalankan dengan parameter yang digunakan ulang. b/137254857
Versi 2.2.0-alpha01
10 Juli 2019
Fitur Baru
- Database dalam Bentuk Paket: Dua API baru di
RoomDatabase.Builder
sekarang tersedia untuk membuatRoomDatabase
mengingat file database sudah terisi.createFromAsset()
digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkancreateFromFile()
digunakan jika file ini berada di sembarang lokasi. Penggunaan API ini mengubah perilaku migrasi destruktif sedemikian rupa sehingga selama migrasi fallback, Room akan mencoba menyalin ulang database yang terisi sebelumnya, jika tersedia. Jika tidak, Room akan melakukan fallback dengan menghilangkan dan membuat ulang semua tabel. b/62185732 - Nilai Default Skema:
@ColumnInfo
sekarang memilikidefaultValue
properti baru yang dapat digunakan untuk menentukan nilai default sebuah kolom. Nilai default adalah bagian dari skema database dan akan divalidasi selama migrasi, jika ditetapkan. b/64088772Catatan: Jika skema database Anda sudah memiliki nilai default, seperti yang ditambahkan melalui
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, dan Anda memutuskan untuk menentukan nilai default melalui@ColumnInfo
ke kolom yang sama, Anda mungkin perlu menyediakan migrasi untuk memvalidasi nilai default yang tidak diperhitungkan. Lihat Migrasi Room untuk informasi selengkapnya. - Relasi Many-to-Many:
@Relation
sekarang memiliki properti baruassociateBy
, yang menerima anotasi baru@Junction
, yang digunakan untuk mendeklarasikan relasi yang perlu dipenuhi melalui tabel junction (disebut juga tabel join). b/69201917 - Relasi One-to-One: Pembatasan pada kolom POJO yang dianotasikan dengan
@Relation
agar menjadi jenisList
atauSet
telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145 - Entity Target: Anotasi DAO
@Insert
,@Update
, dan@Delete
sekarang memiliki properti barutargetEntity
, yang memungkinkan penentuan tabel target yang dimaksudkan untuk ditindaklanjuti dengan metode DAO. Hal ini memungkinkan parameter metode DAO untuk menjadi POJO arbitrer yang akan ditafsirkan sebagai entity parsial. Dalam praktiknya, hal ini memungkinkan penyisipan, penghapusan, dan update parsial. b/127549506 - Pemroses Anotasi Inkremental Gradle: Room sekarang menjadi pemroses anotasi yang mengisolasi Gradle dan inkrementabilitas dapat diaktifkan melalui opsi pemroses
room.incremental
. Lihat Opsi Compiler Room untuk informasi selengkapnya. Jika Anda mengalami masalah, harap laporkan sebagai bug di sini. Kami berencana untuk mengaktifkan inkrementabilitas secara default pada versi stabil di waktu mendatang. b/112110217
Perbaikan Bug
- Room tidak lagi menyebarkan
EmptySetResultException
ke pengendali error global saat aliran Rx dari suatu kueri telah dibuang sebelum kueri tersebut selesai. b/130257475 - Memperbaiki bug saat Room menampilkan pesan error yang salah saat fungsi DAO penangguhan yang dianotasikan dengan
@RawQuery
tidak memiliki jenis nilai yang ditampilkan. b/134303897 - Room tidak akan lagi menghasilkan adapter DAO dengan jenis mentah. b/135747255
Versi 2.1.0
Versi 2.1.0
13 Juni 2019
Room 2.1.0 dirilis tanpa perubahan dari versi 2.1.0-rc01
. Commit yang disertakan dalam versi tersebut dapat dilihat di sini.
Perubahan penting sejak 2.0.0
- FTS: Room sekarang mendukung entity dengan tabel pemetaan FTS3 atau FTS4 . Class yang dianotasikan dengan
@Entity
sekarang juga dapat dianotasikan dengan@Fts3
atau@Fts4
untuk mendeklarasikan class dengan tabel penelusuran teks lengkap pemetaan. Opsi FTS untuk penyesuaian lebih lanjut tersedia melalui metode anotasi. - View: Sekarang Room mendukung deklarasi class sebagai kueri tersimpan, yang disebut juga view, menggunakan anotasi
@DatabaseView
. - Couroutine: Metode DAO sekarang dapat berupa fungsi penangguhan. Sertakan
room-ktx
dalam dependensi Anda untuk memanfaatkan fungsionalitas ini. Artefak ktx juga menyediakan fungsi ekstensiRoomDatabase.withTransaction
untuk melakukan transaksi database dalam coroutine. - Nilai Otomatis: Room sekarang mendukung deklarasi class beranotasi AutoValue sebagai entity dan POJO. Anotasi Room
@PrimaryKey
,@ColumnInfo
,@Embedded
, dan@Relation
sekarang dapat dideklarasikan dalam metode abstrak milik class beranotasi nilai otomatis. Perhatikan bahwa anotasi ini juga harus disertai dengan@CopyAnnotations
agar Room dapat memahaminya dengan baik. - Dukungan Asinkron Tambahan: Metode DAO yang dianotasikan dengan
@Insert
,@Delete
, atau@Update
, beserta@Query
yang berisi pernyataanINSERT
,DELETE
, atauUPDATE
, sekarang mendukung jenis nilai yang ditampilkan RxCompletable
,Single
, danMaybe
, serta jenis nilai yang ditampilkan GuavaListenableFuture
, dan semuanya juga dapat menjadi fungsi penangguhan. enableMultiInstanceInvalidation
adalah API baru diRoomDatabase.Builder
untuk mengaktifkan pembatalan di berbagai instance RoomDatabase yang menggunakan file database yang sama.fallbackToDestructiveMigrationOnDowngrade
adalah API baru diRoomDatabase.Builder
untuk otomatis membuat ulang database jika downgrade terjadi.ignoredColumns
adalah API baru dalam anotasi@Entity
yang dapat digunakan untuk membuat daftar kolom yang diabaikan menurut namanya.- Sekarang Room akan menggunakan konstruktor utama Kotlin dalam class data dengan benar, sehingga tidak perlu lagi untuk mendeklarasikan properti sebagai
vars
.
Versi 2.1.0-rc01
29 Mei 2019
Perbaikan Bug
- Memperbaiki error inisialisasi Room yang mungkin terjadi akibat konfigurasi temp_store yang sudah disiapkan. b/132602198
- Memperbaiki peringatan penggunaan tanda petik ganda bagi pengguna yang menggunakan SQLite 3.27.0 dan yang lebih baru. b/131712640
- Memperbaiki bug saat InvalidationTracker akan menyebabkan error saat beberapa pemeriksaan pembatalan terjadi secara paralel. b/133457594
Versi 2.1.0-beta01
7 Mei 2019
androidx.room 2.1.0-beta01
dirilis tanpa perubahan dari versi 2.1.0-alpha07. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Versi 2.1.0-alpha07
25 April 2019
Perubahan API/Perilaku
- Fungsi ekstensi
RoomDatabase.withTransaction
telah diubah agar tidak lagi mengambil blok fungsi yang menggunakanCoroutineScope
sebagai penerima. Perubahan ini mencegah dilewatkannya wrappercoroutineScope { }
tambahan yang diperlukan untuk menjalankan berbagai hal dalam blok transaksi secara serentak.
Perbaikan Bug
- Memperbaiki bug saat Room gagal mencocokkan TypeConverter untuk fungsi DAO Kotlin yang berisi parameter jenis Collection. b/122066791
Versi 2.1.0-alpha06
22 Maret 2019
Perubahan API/Perilaku
- Kueri transaksi asinkron sekarang diserialisasi sedemikian rupa sehingga Room tidak akan menggunakan lebih dari satu thread untuk menjalankan transaksi database.
RoomDatabase.Builder.setTransactionExecutor(Executor)
ditambahkan untuk memungkinkan pengonfigurasian eksekutor yang akan digunakan dalam transaksi. RoomDatabase.runInTransaction(Callable)
tidak akan lagi menggabung pengecualian yang sudah diperiksa ke dalam RuntimeExceptions. b/128623748
Perbaikan Bug
- Memperbaiki bug saat pelacak pembatalan berhenti mengamati tabel konten jika observer untuk tabel konten dan juga tabel FTS konten eksternal ditambahkan. b/128508917
- Memperbarui tata bahasa SQLite Room agar sesuai dengan SQLite 3.24.0. b/110883668
Versi 2.1.0-alpha05
13 Maret 2019
Fitur Baru
- Fungsi ekstensi
RoomDatabase.withTransaction
memungkinkan Anda melakukan transaksi database dengan aman di dalam coroutine. Fungsi ekstensi Room beserta dukungan coroutine tersedia dalam artefakroom-ktx
. - Metode DAO non-abstrak yang dianotasi dengan
@Transaction
sekarang dapat menjadi fungsi penangguhan. b/120241587
Perubahan API/Perilaku
- Artefak
room-coroutines
diubah namanya menjadiroom-ktx
mengikuti penamaan yang sama dengan artefak androidx lainnya. beginTransaction
,setTransactionSuccessful
, danendTransaction
diRoomDatabase
tidak digunakan lagi dan digantikan denganrunInTransaction
serta fungsi ekstensiroom-ktx
withTransaction
.
Perbaikan Bug
- Memperbaiki bug saat argumen tokenizer dibatalkan jika tokenizer yang digunakan berformat SEDERHANA. b/125427014
- Memperbaiki bug saat Room gagal mengidentifikasi fungsi penangguhan dengan parameter yang berjenis class dalam. b/123767877
- Memperbaiki bug saat metode DAO
@Query
yang ditangguhkan dengan pernyataanINSERT
,UPDATE
, atauDELETE
mempersiapkan kueri di thread utama. b/123695593 - Memperbaiki berbagai bug di mana Room menghasilkan kode yang salah untuk fungsi penangguhan tertentu. b/123466702 dan b/123457323
- Memperbaiki bug di mana penggunaan metode yang tidak digunakan lagi tidak disembunyikan dengan benar dalam kode yang dihasilkan. b/117602586
- Mengupdate dependensi Room androidx.sqlite ke 1.0.2 yang berisi perbaikan untuk penanganan database yang rusak dengan benar. b/124476912
Masalah Umum
- Room 2.1.0-alpha05 menggunakan artefak
kotlinx-metadata-jvm
sebagai dependensinya, yang saat ini tidak tersedia di Maven Central (KT-27991). Dependensi ini dapat diatasi dengan menambahkanmaven { url "https://kotlin.bintray.com/kotlinx/" }
ke repositori project Anda.
Versi 2.1.0-alpha04
25 Januari 2019
Fitur Baru
- Metode DAO yang dianotasi dengan
@Query
yang berisi pernyataanINSERT
,UPDATE
, atauDELETE
sekarang dapat menampilkan jenis asinkron sepertiSingle
,Mayble
,Completable
, danListenableFuture
. Selain itu, pernyataan tersebut juga dapat berupa fungsi penangguhan. b/120227284
Perubahan API/Perilaku
- Room sekarang akan memunculkan error jika metode DAO non-abstrak yang dianotasi dengan
@Transaction
menampilkan jenis asinkron sepertiSingle
,Mayble
,Completable
,LiveData
, atauListenableFuture
. Karena transaksi dibatasi thread, saat ini Room tidak dapat lagi memulai dan mengakhiri transaksi terkait fungsi yang mungkin menjalankan kueri di thread berbeda. b/120109336 OnConflictStrategy.FAIL
danOnConflictStrategy.ROLLBACK
sudah@Deprecated
karena tidak berperilaku sesuai yang diharapkan dengan binding SQLite terbaru Android. b/117266738
Perbaikan Bug
- Memperbaiki bug saat Room tidak menggunakan TypeConverter dari jenis nilai yang ditampilkan tertentu dengan benar jika metode DAO berupa fungsi penangguhan. b/122988159
- Memperbaiki bug saat Room salah mengidentifikasi fungsi penangguhan yang diwariskan sebagai bukan penangguhan. b/122902595
- Memperbaiki bug saat Room menghasilkan kode yang salah ketika kolom
@Embedded
berada di class induk dan digunakan di beberapa class turunan. b/121099048 - Memperbaiki masalah saat database menemui deadlock saat memanggil fungsi penangguhan DAO di antara
beginTransaction()
danendTransaction()
. b/120854786
Versi 2.1.0-alpha03
4 Desember 2018
Perubahan API
- FTS
tokenizer
dalam@Fts3
/@Fts4
sekarang menggunakan String, bukan Enum. Ini memungkinkan penggunaan tokenizer kustom di Room. Tokenizer bawaan tetap ditentukan diFtsOptions
sebagai konstanta string. b/119234881
Fitur Baru
- Couroutine: Metode DAO sekarang dapat berupa fungsi penangguhan. Untuk mendukung fungsi penangguhan di Room, artefak baru,
room-coroutines
, dirilis. b/69474692 - Metode DAO yang dianotasi dengan
@Insert
,@Delete
, atau@Update
sekarang mendukungListenableFuture
sebagai jenis nilai yang ditampilkan. b/119418331
Perbaikan Bug
- Memperbaiki bug saat Room salah mencoba untuk menemukan konstruktor dengan kolom dalam properti
ignoredColumns
untuk@Entity
. b/119830714 - Memperbaiki bug yang menyebabkan Room tidak menandai parameter metode DAO sebagai final dalam implementasi yang dihasilkan. b/118015483
- Memperbaiki bug yang menyebabkan prosesor Room tidak bekerja saat melaporkan error pada kueri yang memuat simbol khusus. b/119520136
- Memperbaiki bug yang menyebabkan Room menolak berbagai implementasi
Collection
lain sebagai argumen ekspresiIN
. b/119884035 - Memperbaiki bug yang menyebabkan LiveData hasil Room mendapatkan pembersihan sampah memori saat diamati selamanya sehingga tidak lagi memberikan data baru. b/74477406
- Mengupdate close lock
RoomDatabase
untuk mengurangi pertentangan kunci. b/117900450
Versi 2.1.0-alpha02
30 Oktober 2018
Fitur Baru
- Menambahkan dukungan untuk mereferensikan
@DatabaseView
dalam@Relation
. b/117680932
Perbaikan Bug
- Memperbaiki bug yang menyebabkan Room menjalankan I/O disk di thread utama saat berlangganan dan berhenti berlangganan jenis nilai Rx yang ditampilkan. b/117201279
- Memperbaiki bug yang menyebabkan Room gagal menemukan pengonversi jenis yang sesuai untuk kolom dalam class entity Kotlin. b/111404868
- Memperbaiki bug yang menyebabkan Room menghasilkan kode yang salah untuk implementasi antarmuka
DAO
yang berisi metode default Kotlin yang tidak memiliki argumen. b/117527454 - Mengupdate parser tata bahasa SQLite Room, memperbaiki masalah performa yang menyebabkan waktu build lama. b/117401230
Versi 2.1.0-alpha01
8 Oktober 2018
Fitur Baru
- FTS: Room sekarang mendukung entity dengan tabel pemetaan FTS3 atau FTS4 . Class yang dianotasi dengan
@Entity
sekarang juga dapat dianotasi dengan@Fts3
atau@Fts4
untuk mendeklarasikan class dengan tabel penelusuran teks lengkap pemetaan. Opsi FTS untuk penyesuaian lebih lanjut tersedia melalui metode anotasi. b/62356416 - View: Sekarang Room mendukung deklarasi class sebagai kueri tersimpan, yang disebut juga view, menggunakan anotasi @DatabaseView. b/67033276
- Nilai Otomatis: Room kini mendukung deklarasi class beranotasi AutoValue sebagai entity dan POJO. Anotasi Room
@PrimaryKey
,@ColumnInfo
,@Embedded
, dan@Relation
sekarang dapat dideklarasikan dalam metode abstrak milik class yang dianotasikan nilai otomatis. Pastikan anotasi ini juga harus disertai dengan@CopyAnnotations
agar Room dapat memahaminya dengan baik. b/62408420 - Dukungan Tambahan untuk Jenis Nilai yang Ditampilkan RX: Metode DAO yang dianotasi dengan
@Insert
,@Delete
, atau@Update
sekarang mendukung jenis nilai yang ditampilkan RxCompletable
,Single<T>
, danMaybe<T>
. b/63317956 - Jenis yang Tidak Dapat Diubah dengan
@Relation
: Sebelumnya, Room memerlukan kolom beranotasi@Relation
dapat disetel, tetapi sekarang kolom tersebut dapat berupa parameter konstruktor. enableMultiInstanceInvalidation
: Adalah API baru diRoomDatabase.Builder
untuk mengaktifkan pembatalan di berbagai instance RoomDatabase yang menggunakan file database yang sama. Mekanisme pembatalan multi-instance ini juga berlaku pada banyak proses. b/62334005fallbackToDestructiveMigrationOnDowngrade
: Adalah API baru diRoomDatabase.Builder
untuk otomatis membuat ulang database jika terjadi downgrade. b/110416954ignoredColumns
: Adalah API baru dalam anotasi@Entity
yang dapat digunakan untuk membuat daftar kolom yang diabaikan menurut namanya. Berguna untuk mengabaikan kolom turunan pada suatu entity. b/63522075
Perubahan API/Perilaku
mCallback
danmDatabase
diRoomDatabase
sekarang@Deprecated
dan akan dihapus pada Room versi utama mendatang. b/76109329
Perbaikan Bug
- Memperbaiki dua masalah saat Room tidak dapat pulih dengan baik dari database yang rusak atau migrasi yang bermasalah selama inisialisasi. b/111504749 dan b/111519144
- Sekarang Room akan menggunakan dengan tepat konstruktor utama Kotlin dalam class data, sehingga menghindari perlunya mendeklarasikan kolom sebagai
vars
. b/105769985
Versi 2.0.0
Versi 2.0.0
1 Oktober 2018
androidx.room 2.0.0
dirilis tanpa perubahan dari versi 2.0.0-rc01.
Versi 2.0.0-rc01
20 September 2018
androidx.room 2.0.0-rc01
dirilis tanpa perubahan dari versi 2.0.0-beta01.
Versi 2.0.0-beta01
2 Juli 2018
Perubahan API/Perilaku
- Menambahkan
RoomDatabase.Builder.setQueryExecutor()
untuk mengizinkan penyesuaian tempat kueri dijalankan - Menambahkan dukungan
Observable
RxJava2 - Implementasi DAO dan Database yang dihasilkan sekarang sudah final
Perbaikan Bug
- Menentukan nama class/kolom di error "tidak dapat menemukan getter untuk kolom" b/73334503
- Memperbaiki kompatibilitas mundur RoomOpenHelper dengan versi Room yang lebih lama b/110197391
Dependensi pra-AndroidX
Untuk Room versi pra-AndroidX, sertakan dependensi berikut:
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
Versi 1.1.1
Versi 1.1.1
19 Juni 2018
Room versi 1.1.1
sama persis dengan Room versi 1.1.1-rc1
.
Versi 1.1.1-rc1
16 Mei 2018
Kami sangat merekomendasikan penggunaan Room versi 1.1.1-rc1
sebagai pengganti versi 1.1.0
jika Anda menggunakan migrasi.
Memperbaiki bug saat Room tidak menangani inisialisasi pasca-migrasi dengan benar b/79362399
Versi 1.1.0
Versi 1.1.0-beta3
19 April 2018
Perbaikan Bug
- Memperbaiki error kompilasi saat POJO Kotlin mereferensikan entity relasi yang ditentukan di Java b/78199923
Versi 1.1.0-beta2
5 April 2018
Perbaikan Bug
Memperbaiki bug penting dalam implementasi
Single
danMaybe
Rx Room saat kueri didaur ulang lebih awal, sehingga terjadi masalah jika Anda menambahkan lebih dari 1 observer ke instanceSingle
atauMaybe
yang ditampilkan. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] tidak akan melakukan
VACUUM
database jika dipanggil di dalam transaksi. b/77235565
Versi 1.1.0-beta1
21 Maret 2018
Perubahan API
- Berdasarkan masukan Ulasan API,
@RawQuery
tidak lagi menerima penerusanString
sebagai parameter kueri. Anda perlu menggunakan [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (lihat [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] untuk membuat instance [SupportSQLiteQuery][ref-SupportSQLiteQuery] yang menyertakan dukungan argumen). - Metode [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] RoomDatabase.Builder sekarang menerima
vararg int
sebagai penggantivararg Integer
.
Perbaikan Bug
- [RoomDatabase.clearAllTables][ref-clearAllTables] sekarang mencoba mengembalikan ruang ke sistem operasi dengan menyetel checkpoint WAL dan melakukan
VACUUM
database. - [
@RawQuery
][ref-RawQuery] sekarang menerima Pojo apa pun untuk propertiobservedEntities
selama Pojo tersebut mereferensikan ke satu atau beberapa entity melalui kolomEmbedded
atauRelation
miliknya. b/74041772 - Paging: Implementasi DataSource Room sekarang menangani dependensi multi-tabel dengan benar (seperti relasi dan gabungan). Sebelumnya penanganan tersebut akan gagal memicu hasil baru, atau dapat gagal mengompilasi. b/74128314
Versi 1.1.0-alpha1
22 Januari 2018
Fitur Baru
RawQuery
: API baru ini memungkinkan metode@Dao
menerima SQL sebagai parameter kueri b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: API baru diRoomDatabase.Builder
ini memberikan kontrol yang lebih terperinci terkait dari versi skema awal mana migrasi destruktif diizinkan (dibandingkan dengan fallbackToDestructiveMigration) b/64989640- Room sekarang hanya mendukung Paging API yang lebih baru (alpha-4+), dan melepas dukungan untuk
LivePagedListProvider
yang tidak digunakan lagi. Untuk menggunakan Room alfa baru, Anda harus menggunakan pagingalpha-4
atau yang lebih tinggi, dan beralih dariLivePagedListProvider
keLivePagedListBuilder
jika belum melakukannya.
Perbaikan Bug
- Peningkatan dukungan untuk jenis Kotlin Kapt. b/69164099
- Urutan kolom tidak membatalkan skema lagi. b/64290754