Room

Library persistensi Room memberikan lapisan abstraksi pada SQLite untuk memungkinkan akses database yang lebih stabil sambil memanfaatkan kemampuan penuh SQLite.
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.

Laporkan masalah baru

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 fungsi initialize 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:

  1. Tentukan objek apa yang diharapkan yang mengimplementasikan RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Tautkan objek dengan deklarasi @Database menggunakan @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. 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 bernama RoomRawQuery yang mirip dengan SupportSQLiteQuery dalam hal mempertahankan string SQL mentah dan fungsi untuk mengikat argumen ke dalam pernyataan. Fungsi yang dianotasi @RawQuery kini dapat menerima RoomRawQuery sebagai parameter tunggalnya. (Iea844, b/330586815)
  • Tambahkan overload setQueryCallback() yang menerima CoroutineContext. (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 menjadi SQLite, dan BundledSQLiteKt menjadi BundledSQLite. (I8b501)

Perbaikan Bug

  • Memperbaiki bug saat RoomDatabase mengalami deadlock atau error dengan waktu tunggu koneksi habis saat menggunakan AndroidSQLiteDriver.

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 implementasi RoomDatabase 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 bahwa RoomDatabase hanya dapat dikonfigurasi dengan eksekutor menggunakan setQueryExecutor atau dengan konteks Coroutine, tetapi tidak keduanya.
  • API untuk mengonfigurasi Room dengan Driver SQLite telah ditambahkan: RoomDatabase.Builder.setDriver(). Untuk informasi selengkapnya tentang Driver API SQLite, lihat dokumentasi KMP SQLite
  • API untuk mengakses SQLiteConnection pokok dari API driver telah ditambahkan: RoomDatabase.useReaderConnection dan RoomDatabase.useWriterConnection.
  • Callback terkait Room Varios sekarang memiliki versi kelebihan beban yang menerima SQLiteConnection, bukan SupportSQLiteDatabase. 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 ke androidx.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 sebagai LoadStateUpdate dari LoadResult.Error yang berisi Throwable. Status error ini dapat diamati melalui PagingDataAdapter.loadStateFlow(Views) atau LazyPagingItems.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 pengecualian 2067 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 dengan columnName 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 dalam runBlocking 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 di InvalidationTracker Anda harus mendeklarasikan onInvalidate() dalam Observer agar memiliki jenis parameter Set dan bukan MutableSet. 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, dan room-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, bukan IllegalStateException, selama pemeriksaan batasan kunci asing untuk migrasi otomatis. (I328dd)
  • Memperbaiki perubahan sumber Kotlin yang tidak kompatibel untuk pengambil/properti getOpenHelper, getQueryExecutor, dan getTransactionExecutor. (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

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 mendeklarasikan onInvalidate() dalam Observer agar memiliki jenis parameter Set dan bukan MutableSet.

  • 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 di room-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 bahwa AutoMigrationSpec akan disediakan pada runtime melalui RoomDatabase.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 selama runMigrationsAndValidate.
  • Dukungan Paging-Room: androidx.room:room-paging dirilis, memberikan dukungan Paging 3.0 native untuk kueri Room yang menampilkan androidx.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 adalah Map, SparseArray, LongSparseArray, beserta ImmutableMap, ImmutableSetMultimap dan ImmutableListMultimap 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 ke RoomDatabase.Builder, sehingga dapat diganti, bukan Dispatchers.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

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 adalah Map beserta ImmutableMap, ImmutableSetMultimap, dan ImmutableListMultimap 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 coroutine Flow.

Paging Room

  • androidx.room:room-paging dirilis, memberikan dukungan Paging 3.0 native untuk kueri Room yang menampilkan androidx.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 dari Key dengan Key menjadi item yang pertama dimuat. Tindakan ini menyimpang dari perilaku yang ada, tempat LoadParams.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 selama runMigrationsAndValidate.

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 bahwa AutoMigrationSpec akan disediakan pada runtime melalui RoomDatabase.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 callback InvalidationTracker terkadang dipanggil secara tidak valid, terlambat, atau tidak ada sama sekali. Berkat Uli Bubenheimer | bubenheimer@users.noreply.github.com (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 adalah androidx.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

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 | hey@marcorei.com’. (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 dengan ksp. Misalnya, gunakan ksp 'androidx.room:room-compiler:2.3.0-beta02', bukan kapt '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 melalui RoomDatabase.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 | 892449346@qq.com’. (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 | ahmedibrahimkhali@gmail.com’. (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 yairobbe@gmail.com’. (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 ahmedre@gmail.com’ (3e6792, b/146911060)

Perubahan API

  • Menambahkan target yang hilang ke anotasi @ForeignKey untuk mencegah penggunaannya di luar anotasi @Entity. (Iced1e)

  • Kolom mCallbacks di RoomDatabase.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 di RoomDatabase dengan Collections.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 adalah androidx.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 kolom room.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 (me@blaz.solar) (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 contact-git@mygod.be’ (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 compiler expandProjection 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 membuat RoomDatabase mengingat file database sudah terisi. createFromAsset() digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkan createFromFile() 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 memiliki defaultValue 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 baru associateBy, 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 jenis List atau Set telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145
  • Entity Target: Anotasi DAO @Insert, @Update, dan @Delete sekarang memiliki properti baru targetEntity, 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 ditampilkan Flow<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 ditampilkan Channel<T> merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakan Flow, lalu menggunakan fungsi di dekatnya untuk mengonversi Flow menjadi Channel. 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 bernama SongIdAndTitle yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut ke SELECT id, title FROM Song sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatan CURSOR_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 ditampilkan Flow<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 ditampilkan Channel<T> merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakan Flow, lalu menggunakan fungsi di dekatnya untuk mengonversi Flow menjadi Channel. 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 bernama SongIdAndTitle yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut ke SELECT id, title FROM Song sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatan CURSOR_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 ke RoomDatabase.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 menggunakan ByteBuffer 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 membuat RoomDatabase mengingat file database sudah terisi. createFromAsset() digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkan createFromFile() 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 memiliki defaultValue 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

    Catatan: 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 baru associateBy, 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 jenis List atau Set telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145
  • Entity Target: Anotasi DAO @Insert, @Update, dan @Delete sekarang memiliki properti baru targetEntity, 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 ekstensi RoomDatabase.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 pernyataan INSERT, DELETE, atau UPDATE, sekarang mendukung jenis nilai yang ditampilkan Rx Completable, Single, dan Maybe, serta jenis nilai yang ditampilkan Guava ListenableFuture, dan semuanya juga dapat menjadi fungsi penangguhan.
  • enableMultiInstanceInvalidation adalah API baru di RoomDatabase.Builder untuk mengaktifkan pembatalan di berbagai instance RoomDatabase yang menggunakan file database yang sama.
  • fallbackToDestructiveMigrationOnDowngrade adalah API baru di RoomDatabase.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 menggunakan CoroutineScope sebagai penerima. Perubahan ini mencegah dilewatkannya wrapper coroutineScope { } 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 artefak room-ktx.
  • Metode DAO non-abstrak yang dianotasi dengan @Transaction sekarang dapat menjadi fungsi penangguhan. b/120241587

Perubahan API/Perilaku

  • Artefak room-coroutines diubah namanya menjadi room-ktx mengikuti penamaan yang sama dengan artefak androidx lainnya.
  • beginTransaction, setTransactionSuccessful, dan endTransaction di RoomDatabase tidak digunakan lagi dan digantikan dengan runInTransaction serta fungsi ekstensi room-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 pernyataan INSERT, UPDATE, atau DELETE 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 menambahkan maven { 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 pernyataan INSERT, UPDATE, atau DELETE sekarang dapat menampilkan jenis asinkron seperti Single, Mayble, Completable, dan ListenableFuture. 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 seperti Single, Mayble, Completable, LiveData, atau ListenableFuture. 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 dan OnConflictStrategy.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() dan endTransaction(). 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 di FtsOptions 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 mendukung ListenableFuture 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 ekspresi IN. 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 Rx Completable, Single<T>, dan Maybe<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 di RoomDatabase.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/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Adalah API baru di RoomDatabase.Builder untuk otomatis membuat ulang database jika terjadi downgrade. b/110416954
  • ignoredColumns: 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 dan mDatabase di RoomDatabase 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 dan Maybe Rx Room saat kueri didaur ulang lebih awal, sehingga terjadi masalah jika Anda menambahkan lebih dari 1 observer ke instance Single atau Maybe 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 penerusan String 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 pengganti vararg 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 properti observedEntities selama Pojo tersebut mereferensikan ke satu atau beberapa entity melalui kolom Embedded atau Relation 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/71458963
  • fallBackToDestructiveMigrationsFrom: API baru di RoomDatabase.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 paging alpha-4 atau yang lebih tinggi, dan beralih dari LivePagedListProvider ke LivePagedListBuilder jika belum melakukannya.

Perbaikan Bug

  • Peningkatan dukungan untuk jenis Kotlin Kapt. b/69164099
  • Urutan kolom tidak membatalkan skema lagi. b/64290754