Room
Atualização mais recente | Versão estável | Candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
1º de junho de 2022 | 2.4.2 | - | - | 2.5.0-alpha02 |
Declarar dependências
Para adicionar uma dependência ao Room, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.
As dependências do Room incluem testes de migrações do Room e RxJava do Room
Adicione as dependências dos artefatos necessários no arquivo build.gradle
para
seu app ou módulo:
Groovy
dependencies { def room_version = "2.4.1" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "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:2.4.1" }
Kotlin
dependencies { val roomVersion = "2.4.1" implementation("androidx.room:room-runtime:$roomVersion") annotationProcessor("androidx.room:room-compiler:$roomVersion") // To use Kotlin annotation processing tool (kapt) kapt("androidx.room:room-compiler:$roomVersion") // To use Kotlin Symbolic Processing (KSP) ksp("androidx.room:room-compiler:$roomVersion") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$roomVersion") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$roomVersion") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$roomVersion") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$roomVersion") // optional - Test helpers testImplementation("androidx.room:room-testing:$roomVersion") // optional - Paging 3 Integration implementation("androidx.room:room-paging:2.4.1") }
Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.
Para ver mais informações sobre dependências, consulte Adicionar dependências de build.
Para bibliotecas que não são do Android, ou seja, módulos Gradle somente para Java ou Kotlin,
você também pode depender de androidx.room:room-common
para usar anotações do Room.
Configurar opções do compilador
O Room conta com as seguintes opções de processador de anotações:
room.schemaLocation
: configura e ativa a exportação de esquemas de banco de dados para arquivos JSON no diretório especificado. Consulte Migrações do Room para ver mais informações.room.incremental
: ativa o processador de anotações incrementais do Gradle.room.expandProjection
: configura o Room para reescrever consultas, de forma que a principal projeção em estrela seja expandida para conter apenas as colunas definidas no tipo de retorno do método DAO.
Um exemplo de como essas opções podem ser configuradas é mostrado no snippet de código a seguir:
Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "room.schemaLocation":"$projectDir/schemas".toString(), "room.incremental":"true", "room.expandProjection":"true"] } } } }
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "room.schemaLocation" to "$projectDir/schemas", "room.incremental" to "true", "room.expandProjection" to "true" ) } } } }
Feedback
Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Versão 2.5.0
Versão 2.5.0-alpha02
1º de junho de 2022
Lançamento de androidx.room:room-*:2.5.0-alpha02
. A versão 2.5.0-alpha02 contém estas confirmações.
Novos recursos
- Novos artefatos
room-paging
,room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
foram adicionados para oferecer suporte à biblioteca Paging do Room (41a1d4, b/203666906), (eb6098, b/203666906), (1b9ae4, b/203666906).
Mudanças na API
- Todo o
room-runtime
foi convertido de Java para Kotlin (If2069, b/206859668), (Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668).Observação: pode haver problemas de incompatibilidade de origem devido à conversão da biblioteca para Kotlin. Se o código estava escrito em Kotlin e chamava a versão antiga do Room, a nova versão vai precisar processar esses casos. Por exemplo, uma mudança incompatível com a origem conhecida é que, no
InvalidationTracker
, você vai precisar declararonInvalidate()
noObserver
para ter um parâmetro do tipoSet
, e nãoMutableSet
. - Foram adicionadas APIs para fornecer nomes de tabelas de chave e valor para desambiguação em
@MapInfo
(Icc4b5). - Um problema de compatibilidade de origem foi corrigido para voltar a permitir o uso da
@Ignore
em getters de propriedade (Ifc2fb).
Correções de bugs
- Algoritmo heurístico de resolução de colunas duplicado. O Room agora vai tentar resolver colunas ambíguas em uma consulta de multimapa. Isso permite que as funções JOIN com tabelas de mesmo nome sejam mapeadas corretamente para um objeto de dados do resultado (I4b444, b/201306012, b/212279118).
Versão 2.5.0-alpha01
23 de fevereiro de 2022
Lançamento de androidx.room:room-*:2.5.0-alpha01
. A versão 2.5.0-alpha01 contém estas confirmações.
Mudanças na API
- Correção de um problema em que o uso do Room
@IntDef
não era aplicado a origens Kotlin (I75f41, b/217951311). - Correção de um problema de compatibilidade de origem para autorizar novamente a
@Query
em getters de propriedade (I0a09b). - Conversão de Java para Kotlin do room-common (I69c48, b/206858235).
Observação: como algumas propriedades foram movidas para objetos complementares durante a conversão da biblioteca em Kotlin, pode haver problemas de incompatibilidade de origem. Se o código estava em Kotlin e chamando a versão antiga do Room, a nova versão vai precisar do sufixo ".Companion" ao acessar essas propriedades.
- Conversão de Java para Kotlin do room-migration (I2724b, b/206858622).
- Conversão de Java para Kotlin dos arquivos relacionados ao
paging
emroom-runtime
(I82fc8, b/206859668). - Adição de API para bloqueio e uso de vários processos no nível do FrameworkSQLite* para proteger a primeira criação e migração de bancos de dados de vários processos (Ied267, b/193182592).
Correções de bugs
- Foi adicionado suporte para propriedades internas em origens Kotlin.
Essa é uma mudança pequena de comportamento no Room, em que o nome
de origem das funções será usado para fazer a correspondência com propriedades como getters/setters.
Antes, ele usava o nome da JVM da função, que é diferente
para funções/propriedades internas.
Se você estiver usando anotações
@JvmName
personalizadas para fazer a correspondência de getters/setters com propriedades particulares, confira atentamente o código gerado após a atualização (If6531, b/205289020).
Versão 2.4.2
Versão 2.4.2
23 de fevereiro de 2022
Lançamento de androidx.room:room-*:2.4.2
. A versão 2.4.2 contém estas confirmações.
Correções de bugs
- Correção de um problema ao gerar código para uma função de suspensão
@Transaction
do Dao com um corpo que gera um método de interface padrão devido à compilação com-Xjvm-default=all
ou equivalente (Ia4ce5). - Resolução de um bug em que o Room gera código para um método de consulta do tipo de retorno
Array<ByteArray>
(If086e, b/213789489).
Versão 2.4.1
Versão 2.4.1
12 de janeiro de 2022
androidx.room:room-*:2.4.1
é lançado. A versão 2.4.1 contém estas confirmações.
Correções de bugs
- Foi adicionado suporte para propriedades internas em origens Kotlin.
Essa é uma mudança pequena de comportamento no Room, em que o nome
de origem das funções será usado para fazer a correspondência com propriedades como getters/setters.
Antes, ele usava o nome da JVM da função, que é diferente
para funções/propriedades internas.
Se você estiver usando anotações
@JvmName
personalizadas para fazer a correspondência de getters/setters com propriedades particulares, confira atentamente o código gerado após a atualização (If6531, b/205289020).
Versão 2.4.0
Versão 2.4.0
15 de dezembro de 2021
Lançamento de androidx.room:room-*:2.4.0
. A versão 2.4.0 contém estas confirmações.
Mudanças importantes desde a versão 2.3.0
- Migrações automáticas: o Room agora oferece uma API para gerar migrações automaticamente, desde que os esquemas sejam exportados. Para que o Room saiba que precisa gerar uma migração automática, uma nova propriedade
@Database#autoMigrations
pode ser usada para declarar de onde e para onde migrar automaticamente as versões. Quando o Room precisa de mais informações sobre como renomear ou excluir tabelas e colunas, a anotação@AutoMigration
pode declarar uma classe de especificação que contém essas entradas. Consulte a documentação@AutoMigration
para saber mais. - Injeção de dependência em migrações automáticas: a
@ProvidedAutoMigrationSpec
é uma nova API para declarar que umaAutoMigrationSpec
vai ser fornecida durante a execução pelo métodoRoomDatabase.Builder#addAutoMigrationSpec()
. Isso permite que um framework de injeção de dependência forneça essas especificações quando ele precisar de dependências complexas. - Suporte ao auxiliar de teste de migração para migrações automáticas: o
MigrationTestHelper
do Room foi atualizado para oferecer suporte a migrações automáticas, fornecendo uma nova API de construtor que recebe a classe de banco de dados em teste. Isso possibilita que o assistente adicione automaticamente migrações automáticas da mesma forma durante arunMigrationsAndValidate
. - Suporte ao Room-Paging: lançamento de
androidx.room:room-paging
, que oferece suporte à Paging 3.0 nativa para consultas do Room que retornamandroidx.paging.PagingSource
. - Métodos de consultas relacionadas: o Room agora oferece suporte aos métodos
@Dao
com tipos de retorno multimapa, que são úteis para instruções JOIN. Os tipos de multimapas com suporte sãoMap
,SparseArray
,LongSparseArray
, além deImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
do Guava.
Versão 2.4.0-rc01
1.º de dezembro de 2021
Lançamento de androidx.room:room-*:2.4.0-rc01
. A versão 2.4.0-rc01 contém estas confirmações.
Novos recursos
- A dependência do Room no KSP foi atualizada para
1.6.0-1.0.1
de modo a oferecer suporte ao Kotlin 1.6.
Versão 2.4.0-beta02
17 de novembro de 2021
Lançamento de androidx.room:room-*:2.4.0-beta02
. A versão 2.4.0-beta02 contém estas confirmações.
Novos recursos
- Adicionamos suporte para SparseArray e LongSparseArray em @MapInfo (Ic91a2b/138910317).
Correções de bugs
- Adicionamos um novo analisador de TypeConverter que considera as informações de nulidade em tipos. Como essas informações só estão disponíveis na KSP, elas são ativadas por padrão somente nela. Se ele causar algum problema, você pode o desativar transmitindo o parâmetro room.useNullAwareTypeAnalysis=false para o processador de anotações. Informe um bug caso isso aconteça, porque essa sinalização vai ser removida no futuro. Com esse novo analisador de TypeConverter, sugerimos fornecer apenas TypeConverters de recebimento não nulos, uma vez que o novo analisador consegue os unir com uma verificação de valores nulos. Isso não afeta os usuários que usam KAPT ou Java porque os processadores de anotações (ao contrário da KSP), não têm informações de nulidade em tipos (Ia88f9, b/193437407).
- Correção de um bug em que o Room falhava ao compilar com um erro de SQL quando uma entidade FTS declarava o uso do tokenizer de ICU (I00db9, b/201753224).
- Resolvemos o problema de migrações automáticas relacionadas a uma nova coluna adicionada a uma entidade incorporada entre as versões (I5fcb1b/193798291).
- Resolvemos o problema relacionado aos tipos de retorno do método de consultas relacionadas em consultas LEFT JOIN. Com essas mudanças, no caso de haver um mapeamento de um para muitos, a coleção retornada de uma chave não vai incluir o objeto de valor inválido se ele não for encontrado no cursor. Se nenhum valor válido for encontrado, uma chave vai ser mapeada para uma coleção vazia (Id5552b/201946438).
- Resolvemos o problema de migração automática em que palavras-chave SQLite não tinham escape em nomes de coluna (Idbed4b/197133152).
Versão 2.4.0-beta01
13 de outubro de 2021
androidx.room:room-*:2.4.0-beta01
é lançado. A versão 2.4.0-beta01 contém estas confirmações.
Correções de bugs
- Correção de um problema em que as migrações automáticas não adicionavam novas colunas quando outra tabela na mesma migração automática tinha uma nova coluna com o mesmo nome (Ia5db5, b/200818663).
- A implementação PagingSource gerada pelo room-paging agora
usa
queryExecutor
transmitido porRoomDatabase.Builder
, em vez deDispatchers.IO
, para que ele possa ser substituído (Iae259).
Versão 2.4.0-alpha05
29 de setembro de 2021
androidx.room:room-*:2.4.0-alpha05
é lançado. A versão 2.4.0-alpha05 contém estas confirmações.
Novos recursos
- Adição de um conversor de tipo integrado para UUID (I671e8, b/73132006).
Mudanças na API
Adição de uma nova propriedade à anotação TypeConverters para permitir que os desenvolvedores desativem os conversores de Enum e UUID integrados. Por padrão, esses conversores estão ativados, mas você pode desativá-los para um determinado escopo ou para todo o banco de dados. Consulte a documentação do TypeConverters para mais detalhes (36ae9e, b/195413406).
Compatibilidade com chaves/valores não POJO para tipos de retorno Multimap em DAOs usando a anotação
@MapInfo
(I4d704).
@MapInfo
será necessário quando a coluna de chave ou valor do mapa for de uma única coluna. Veja um exemplo:
@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>
room-paging
agora é um artefato obrigatório ao usar a Paging3 com o Room (Ieaffe).
Correções de bugs
- Correção de um problema em que os resultados das consultas de vários mapas não eram ordenados corretamente quando a consulta continha uma cláusula ORDER BY de uma coluna da chave do mapa (I6b887).
Contribuição externa
- Adição de uma nova API para especificar a ordem do índice em @Index. Agradecemos a Nikita Zhelonkin (I033fc).
Versão 2.4.0-alpha04
21 de julho de 2021
Lançamento de androidx.room:room-*:2.4.0-alpha04
. A versão 2.4.0-alpha04 contém essas confirmações.
Novos recursos
O Room agora é compatível com os métodos
@Dao
com tipos de retorno de multimapa, que são úteis para instruções JOIN. Os tipos de multimapas compatíveis sãoMap
, além deImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
do Guava.Veja exemplos de consultas de multimapas a seguir:
Mapa de relação um para um
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Mapa de relação um para muitos (multimapa padrão)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
O resultado do multimapa também pode ser unido aos tipos de retorno assíncronos compatíveis, como
LiveData
,Observable
do Rx ou corrotinasFlow
.
Room-Paging
Lançamento de
androidx.room:room-paging
, que oferece compatibilidade com a Paging 3.0 nativa para consultas do Room que retornamandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Esse artefato substitui a implementação de
androidx.paging.PagingSource
gerada pelo Room por uma implementação baseada nas APIs da Paging 3.0. A nova implementação da PagingSource analisa as chaves de forma diferente. Assim, qualquer chave fornecida manualmente à PagingSource do Room precisa considerar essa mudança de comportamento, incluindo a initialKey transmitida pelo construtor do Pager. As páginas começarão a ser carregadas pelaKey
, sendo que aKey
será o primeiro item carregado. Esse comportamento é diferente do já existente, em que aLoadParams.Refresh.Key
é tratada como a posição de rolagem do usuário e os itens são carregados antes e depois da chave.O artefato é opcional e, caso seja desativado, vai ser substituído pelo suporte à Paging 3.0 que já existe, introduzido no Room 2.3. Contudo, em uma versão futura, ele deixará de ser opcional para usos do Room com a Paging 3.0. Adicione o novo artefato room-paging ao caminho da classe para ativá-lo. Se você estiver usando o Gradle, é possível adicionar o snippet a seguir ao build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Correções de bugs
- Correção de um problema com migrações automáticas ao processar violações de chaves externas (b/190113935).
Versão 2.4.0-alpha03
16 de junho de 2021
Lançamento de androidx.room:room-*:2.4.0-alpha03
. A versão 2.4.0-alpha03 contém estas confirmações.
Mudanças na API
- Atualize o
MigrationTestHelper
do Room para oferecer suporte a migrações automáticas, fornecendo uma nova API de construtor que recebe a classe de banco de dados em teste. Isso possibilita que o assistente adicione automaticamente migrações automáticas da mesma forma durante arunMigrationsAndValidate
.
Correções de bugs
Correção de um problema com a biblioteca nativa SQLite do Room para oferecer suporte aos chips M1 da Apple (b/174695268).
Correção de um problema em que o Room não retornava quando o tipo de retorno de uma função @Transaction era um fluxo (I56ddd, b/190075899).
Correção de um problema com migrações automáticas relacionadas aos índices (b/177673291).
Atualizações de dependência
- A compatibilidade com KSP do Room agora depende da KSP
1.5.10-1.0.0-beta01
(1ecb11, b/160322705).
Versão 2.4.0-alpha02
5 de maio de 2021
Lançamento de androidx.room:room-*:2.4.0-alpha02
. A versão 2.4.0-alpha02 contém estas confirmações.
Mudanças na API
- A
@ProvidedAutoMigrationSpec
é uma nova API para declarar que umaAutoMigrationSpec
será fornecida no momento da execução pelaRoomDatabase.Builder#addAutoMigrationSpec()
. Isso permite que um framework de injeção de dependência forneça essas especificações quando ele precisar de dependências complexas.
Correções de bugs
- Correção de um problema com migrações automáticas em que as
@DatabaseView
s não eram recriadas corretamente.
Contribuição externa
- Correção de um problema no
JournalMode.TRUNCATE
do Room em que o callback doInvalidationTracker
às vezes era invocado de forma inválida, tarde demais ou não era exibido. Agradecemos aUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286).
Versão 2.4.0-alpha01
21 de abril de 2021
Lançamento de androidx.room:room-*:2.4.0-alpha01
. A versão 2.4.0-alpha01 contém estas confirmações.
Novos recursos
- Migrações automáticas: o Room agora oferece uma API para gerar migrações automaticamente, desde que os esquemas sejam exportados. Para que o Room saiba que precisa gerar uma migração automática, uma nova propriedade
@Database#autoMigrations
pode ser usada para declarar de onde e para onde migrar automaticamente as versões. Quando o Room precisa de mais informações sobre como renomear ou excluir tabelas e colunas, a anotação@AutoMigration
pode declarar uma classe de especificação que contém essas entradas. Consulte a documentação@AutoMigration
para saber mais.
Correções de bugs
- Correção de um problema em que
defaultValue
com parênteses extras era validado incorretamente pelo esquema de validação do Room b/182284899.
Versão 2.3.0
Versão 2.3.0
21 de abril de 2021
Lançamento de androidx.room:room-*:2.3.0
. A versão 2.3.0 contém estas confirmações.
Mudanças importantes desde a versão 2.2.0
- Suporte integrado a enumeração: o Room agora vai usar como padrão um conversor de tipo de enumeração para string e vice-versa, caso nenhum tenha sido fornecido. Se já houver um conversor de tipo para uma enumeração, o Room vai priorizar o uso dela no padrão.
- Callback de consultas: o Room agora oferece uma API de callback geral RoomDatabase.QueryCallback, para quando as consultas estão prestes a serem executadas, o que pode ser útil para fazer login em builds de depuração. O callback pode ser definido usando
RoomDatabase.Builder#setQueryCallback()
- Melhoria pré-empacotada: o Room agora tem APIs para criar um banco de dados usando outro pré-empacotado lido de um stream de entrada. Isso permite casos como quando o banco de dados de pré-pacote está compactado em gzip.
- Conversores de tipo fornecidos: o Room agora tem APIs para fornecer instâncias de conversores de tipo, de modo que o app possa controlar a inicialização delas. Para marcar um conversor de tipo que será fornecido ao Room, use a nova anotação @ProvidedTypeConverter.
- Suporte ao RxJava3: o Room agora tem suporte aos tipos RxJava3. Assim como no RxJava2, você pode declarar métodos DAO em que os tipos de retorno são Flowable, Single, Maybe e Completable. Além disso, um novo artefato
androidx.room:room-rxjava3
está disponível para manter a compatibilidade com o RxJava3 - Suporte ao Paging 3.0: o Room agora tem suporte à geração de implementações para métodos anotados como
@Query
cujo tipo de retorno éandroidx.paging.PagingSource
.
Versão 2.3.0-rc01
24 de março de 2021
Lançamento de androidx.room:room-*:2.3.0-rc01
. A versão 2.3.0-rc01 contém estas confirmações.
Correções de bugs
- Um problema que impedia que as consultas do fluxo de corrotinas criadas pelo Room fossem consumidas em um bloco de suspensão
withTransaction
foi corrigido (I797bf).
Versão 2.3.0-beta03
10 de Março de 2021
Lançamento de androidx.room:room-*:2.3.0-beta03
. A versão 2.3.0-beta03 contém estas confirmações.
Novos recursos
- Foi adicionado suporte a compilação incremental para KSP (I031c1, b/176453350).
Correções de bugs
- Correção de um bug em que a criação de PagingSource na linha de execução principal poderia acionar um ANR (I42b74, b/181221318).
- A visibilidade
@ExperimentalRoomApi
foi corrigida para ser pública em vez de particular (b/181356119).
Contribuição externa
- O Room poderá aceitar um tipo de retorno POJO em um método DAO anotado como
@Query
quando também for anotado com@SkipQueryVerification
. O Room vai fazer o possível para converter o resultado da consulta para o tipo de retorno POJO da mesma forma que um método DAO anotado com@RawQuery
. Agradecemos a "Markus Riegel | hey@marcorei.com" (I45acb).
Versão 2.3.0-beta02
18 de fevereiro de 2021
Lançamento de androidx.room:room-*:2.3.0-beta02
. A versão 2.3.0-beta02 contém estas confirmações.
Novos recursos
O Room agora tem compatibilidade experimental com a API Kotlin Symbol Processing, ou KSP (link em inglês).
A KSP substitui KAPT para executar de forma nativa os processadores de anotações no compilador Kotlin, reduzindo significativamente os tempos de compilação.
Para usar o Room com KSP, você pode aplicar o plug-in da KSP para Gradle e substituir a configuração
kapt
no seu arquivo de build porksp
. Por exemplo, em vez dekapt 'androidx.room:room-compiler:2.3.0-beta02'
useksp 'androidx.room:room-compiler:2.3.0-beta02'
. Consulte a documentação da KSP (link em inglês) para saber mais.Como a KSP é experimental, é recomendável que você continue usando KAPT para o código de produção. A redução dos tempos de compilação só ocorrerá se não houver outros processadores que usem KAPT. Acesse b/160322705 para ver os problemas conhecidos.
Versão 2.3.0-beta01
27 de janeiro de 2021
Lançamento de androidx.room:room-*:2.3.0-beta01
. A versão 2.3.0-beta01 contém estas confirmações.
Novos recursos
- Bancos de dados com fechamento automático: o Room agora pode fechar bancos de dados que não são acessados após um determinado período. Esse é um recurso experimental e pode ser ativado chamando
RoomDatabase.Builder#setAutoCloseTimeout()
. Ele é útil para aplicativos com vários bancos de dados.
Correções de bugs
- Correção de um problema em que métodos Dao com vários métodos
@Update
ou@Delete
com estratégias de conflito diferentes geravam código com apenas uma das estratégias, ignorando efetivamente a que foi definida (/I0b90d, b/176138543).
Versão 2.3.0-alpha04
16 de dezembro de 2020
Lançamento de androidx.room:room-*:2.3.0-alpha04
. A versão 2.3.0-alpha04 contém estas confirmações.
Novos recursos
- O Room agora oferece uma API callback geral
RoomDatabase.QueryCallback
para quando as consultas estão prestes a ser executadas, o que pode ser útil para gerar registros nos builds de depuração. O callback pode ser definido usandoRoomDatabase.Builder#setQueryCallback()
(Iaa513, b/174478034, b/74877608). - O Room agora usará como padrão um Enum para String e o conversor de tipo de vice-versa, se nenhum for fornecido. Se já houver um conversor de tipo para uma enumeração, o Room vai priorizar o uso dela no padrão (b/73132006).
Problema conhecido
- Se um conversor de tipo unidirecional para leitura já existir para Enum, o Room poderá usar acidentalmente o conversor integrado de String para Enum, o que talvez não seja desejado. Esse é um problema conhecido que pode ser corrigido com um conversor de duas vias. Consulte b/175707691.
Correções de bugs
- Correção de um problema em que o Room desativava incorretamente o processamento de anotações incrementais em versões mais recentes do JDK (b/171387388).
- Correção de um problema com o Room que localizava a classe gerada quando diversos carregadores de classe eram usados. Agradecemos a "Serendipity | 892449346@qq.com" pela correção (b/170141113).
- Correção de um problema em que o Room gerava código incorreto quando um
@Dao
Kotlin tinha uma classe base cujos genéricos eram primitivos na JVM (b/160258066).
Contribuição externa
- O Room usará por padrão
beginTransactionNonExclusive
se o modo WAL estiver ativado e a API for 16 ou mais recente. Agradecemos a "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com" (b/126258791).
Versão 2.3.0-alpha03
14 de outubro de 2020
androidx.room:room-*:2.3.0-alpha03
é lançado. A versão 2.3.0-alpha03 contém estas confirmações.
Novos recursos
O Room agora tem APIs para fornecer instâncias de conversores de tipo, para que o app possa controlar a inicialização delas. Para marcar um conversor de tipo que será fornecido ao Room, use a nova anotação
@ProvidedTypeConverter
. Graças a "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210).O Room agora tem APIs para criar um banco de dados usando um banco de dados pré-empacotado lido de um stream de entrada. Isso permite casos como quando o banco de dados de pré-pacote está compactado em gzip. Graças a "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060).
Mudanças na API
Adição de destino ausente à anotação
@ForeignKey
, para evitar o uso fora da anotação@Entity
(Iced1e).O campo
mCallbacks
emRoomDatabase.java
agora está oculto (d576cb, b/76109329).
Correções de bugs
Atualização da documentação de TypeConverters para esclarecer que os TypeConverters só podem ser usados para converter colunas / campos, não linhas (I07c56, b/77307836).
Atualização do DaoProcessor para corrigir erros do compilador no Dao usando um supertipo genérico com "primitivos" do Kotlin (Ice6bb, b/160258066).
Atualização da documentação dos métodos de adição/remoção do observador para esclarecer as linhas de execução (Ifd1d9, b/115388921).
Correção de um problema com o Room validando de maneira incorreta as tabelas FTS que declaravam a coluna rowid (d62ebc, b/145858914).
Contribuições externas
Correção de problemas de localidade relacionados a maiúsculas/minúsculas no turco (5746e3, b/68159494).
Substituição do
ConcurrentHashMap
dentro doRoomDatabase
porCollections.synchronizedMap()
para evitar problemas no Android Lollipop (d1cfc7, b/162431855).Adição de um callback onOpenPrepackagedDatabase para quando um banco de dados pré-empacotado é copiado (I1ba74, b/148934423).
Versão 2.3.0-alpha02
22 de julho de 2020
androidx.room:room-*:2.3.0-alpha02
é lançado. A versão 2.3.0-alpha02 contém estas confirmações.
Novos recursos
- Suporte ao RxJava3: o Room agora tem suporte aos tipos RxJava3. Assim como no RxJava2, você pode declarar métodos DAO em que os tipos de retorno são Flowable, Single, Maybe e Completable. Além disso, um novo artefato
androidx.room:room-rxjava3
está disponível para manter a compatibilidade com o RxJava3 (b/152427884).
Mudanças na API
- Agora há compatibilidade com a declaração de um
@TypeConverter
na classe de objeto do Kotlin (b/151110764). - A opção de processamento incremental de anotações do Room agora é ativada por padrão (b/112110217).
Versão 2.3.0-alpha01
10 de junho de 2020
androidx.room:room-*:2.3.0-alpha01
é lançado. A versão 2.3.0-alpha01 contém estas confirmações.
Novos recursos
Suporte à Paging 3.0: o Room agora terá suporte à geração de implementações para métodos
@Query
anotados comandroidx.paging.PagingSource
como tipo de retorno.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Mudanças na API
@RemoveUnusedColumns
é uma nova anotação conveniente que faz com que o Room reescreva a projeção "*" em uma consulta para que as colunas não usadas no resultado sejam removidas.- A opção de processador
room.expandProjection
está obsoleta. Use@RemoveUnusedColumns
para substituir consultas de otimização do Room com projeções em estrela. Observe que@RemoveUnusedColumn
não substitui a solução de conflito de colunasroom.expandProjection
oferecida em relação aos tipos de retorno que continham campos@Embedded
.
Correções de bugs
- Um bug em que o Room não detectava corretamente a versão do JDK usada para ativar o processador de anotações incremental foi corrigido. Agradecimentos ao Blaz Solar (me@blaz.solar) (b/155215201).
- O Room agora incorpora a dependência ANTLR com o processador de anotações para evitar conflitos de versão com outros processadores que também usam o ANTLR (b/150106190).
Versão 2.2.6
Versão 2.2.6
16 de dezembro de 2020
Lançamento de androidx.room:room-*:2.2.6
. A versão 2.2.6 contém estas confirmações.
Correções de bugs
- Correção de um problema em que o Room desativava incorretamente o processamento de anotações incrementais em versões mais recentes do JDK (b/171387388).
Versão 2.2.5
Versão 2.2.5
18 de março de 2020
androidx.room:room-*:2.2.5
é lançado. A versão 2.2.5 contém essas confirmações (link em inglês).
Correções de bugs
MultiInstanceInvalidationService
agora é directBootAware. Graças a "Mygod contact-git@mygod.be" (b/148240967).- Correção de um bug que causava uma falha quando a invalidação de várias instâncias era ativada e o banco de dados continha uma entidade FTS (b/148969394).
- Um problema ao carregar as bibliotecas nativas do SQLite no processador de anotações do Room que causava falhas no compilador devido a compilações paralelas foi corrigido (b/146217083, link em inglês).
Versão 2.2.4
Versão 2.2.4
19 de fevereiro de 2020
Lançamento de 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
e androidx.room:room-testing:2.2.4
. A versão 2.2.4 contém essas confirmações (link em inglês).
Correções de bugs
- Correção de um problema com a suspensão de transações em que elas eram bloqueadas quando a corrotina era cancelada rapidamente antes do início da transação (b/148181325).
- Correção de um problema em que o @Generated era usado incorretamente ao compilar com o JDK 9 (b/146538330).
- Um problema em que o Room gerava código incorreto quando uma interface DAO no Kotlin tinha uma função concreta foi corrigido (b/146825845, link em inglês).
Versão 2.2.3
Versão 2.2.3
18 de dezembro de 2019
androidx.room:room-*:2.2.3
é lançado. A versão 2.2.3 contém essas confirmações (link em inglês).
Correções de bugs
- Um bug em que o Room não validava um banco de dados que não tinha passado por uma migração e continha um hash herdado com índices no esquema foi corrigido (b/139306173, todos os links do rastreador de problemas estão em inglês)
Versão 2.2.2
Versão 2.2.2
20 de novembro de 2019
androidx.room:room-*:2.2.2
é lançado. A versão 2.2.2 contém essas confirmações (link em inglês).
Correções de bugs
- Um bug em que a coleção de uma relação um para um com mais de 999 linhas fazia com que o Room retornasse itens relacionados nulos foi corrigido (b/143105450)
Versão 2.2.1
Versão 2.2.1
23 de outubro de 2019
androidx.room:room-*:2.2.1
é lançado. A versão 2.2.1 contém estas confirmações.
Correções de bugs
- Correção de um bug em que o Room alertava incorretamente sobre
CURSOR_MISMATCH
com a opção de compiladorexpandProjection
ativada (b/140759491) - Foi adicionado um mecanismo de repetição para lidar com a biblioteca nativa ausente usada para verificar consultas durante o tempo de compilação.
Versão 2.2.0
Versão 2.2.0
9 de outubro de 2019
androidx.room:room-*:2.2.0
é lançado. A versão 2.2.0 contém essas confirmações (link em inglês).
Mudanças importantes desde a versão 2.1.0
- Banco de dados pré-empacotado: duas novas APIs em
RoomDatabase.Builder
agora estão disponíveis para criar umRoomDatabase
dado um arquivo de banco de dados já preenchido.createFromAsset()
é usado quando o arquivo de banco de dados pré-preenchido está na pasta de recursos do APK, enquantocreateFromFile()
é usado quando o arquivo está em um local arbitrário. Os usos dessas APIs modificam o comportamento das migrações destrutivas de modo que, durante uma migração substituta, o Room vai tentar copiar novamente o banco de dados pré-preenchido, se disponível. Caso contrário, ela vai substituir e recriar todas as tabelas (b/62185732). - Valores padrão do esquema:
@ColumnInfo
agora tem uma nova propriedade,defaultValue
, que pode ser usada para especificar o valor padrão de uma coluna. Os valores padrão fazem parte de um esquema do banco de dados e vão ser validados durante as migrações, se especificados (b/64088772). - Relações muitos para muitos:
@Relation
agora tem uma nova propriedadeassociateBy
, que usa uma nova anotação@Junction
, aplicada para declarar uma relação que precisa ser satisfeita por uma tabela de junção, também conhecida como "tabela mesclada" (b/69201917). - Relações um para um: a restrição nos campos de POJO anotados com
@Relation
para serem do tipoList
ouSet
foi cancelada, permitindo efetivamente relações de valor único representado (b/62905145). - Entidade de destino: as anotações DAO
@Insert
,@Update
e@Delete
agora têm uma nova propriedadetargetEntity
, que permite especificar a tabela de destino em que o método DAO vai atuar. Isso permite que os parâmetros desses métodos DAO sejam POJOs arbitrários, que serão interpretados como entidades parciais. Na prática, isso permite inserções, exclusões e atualizações parciais (b/127549506). - Fluxo de corrotinas: os métodos DAO
@Query
agora podem ser do tipo de retornoFlow<T>
. O fluxo retornado reemitirá um novo conjunto de valores se as tabelas de observação na consulta forem invalidadas. A declaração de uma função DAO com um tipo de retornoChannel<T>
é um erro. O Room recomenda o uso deFlow
seguido das funções vizinhas para converter oFlow
emChannel
(b/130428884). - Processador de anotações incremental do Gradle: o Room agora é um processador de anotações de isolamento
Gradle, e a incrementabilidade pode ser ativada com a opção
room.incremental
do processador. Consulte Opções do compilador do Room para ver mais informações. Caso encontre algum problema, informe um bug neste link. Planejamos ativar a incrementabilidade por padrão em uma versão futura e estável. b/112110217, link em inglês. - Projeções de expansão: foi adicionada uma nova opção de compilador experimental
room.expandProjection
, que faz com que o Room reescreva uma consulta com uma projeção em estrela para conter apenas as colunas no tipo de retorno POJO. Por exemplo, para um método DAO com@Query("SELECT * FROM Song")
que retorna um POJO chamadoSongIdAndTitle
com apenas dois campos. Em seguida, o Room vai reescrever a consulta paraSELECT id, title FROM Song
, de forma que o conjunto mínimo de colunas para satisfazer o tipo de retorno seja buscado. Isso basicamente elimina o avisoCURSOR_MISMATCH
que é apresentado quando a consulta retorna colunas extras que não correspondem a nenhum campo no tipo POJO retornado.
Versão 2.2.0-rc01
5 de setembro de 2019
Lançamento de androidx.room:room:2.2.0-rc01
. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).
Nenhuma alteração pública desde o Room 2.2.0-beta01
.
Versão 2.2.0-beta01
22 de agosto de 2019
androidx.room:room-*:2.2.0-beta01
é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).
Correções de bugs
- Um bug em que uma consulta do fluxo de corrotinas parava de reemitir novos valores depois de um certo tempo foi corrigido (b/139175786).
- Correção de um bug em que o Room não aceitava um código hash de esquema legado ao abrir um banco de dados que não havia passado por uma migração desde o Room 1.0, causando uma falha no ambiente de execução devido a um esquema inválido (b/139306173).
Versão 2.2.0-alpha02
7 de agosto de 2019
androidx.room:room-*:2.2.0-alpha02
é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).
Novos recursos
- Fluxo de corrotinas: os métodos DAO
@Query
agora podem ser do tipo de retornoFlow<T>
. O fluxo retornado reemitirá um novo conjunto de valores se as tabelas de observação na consulta forem invalidadas. A declaração de uma função DAO com um tipo de retornoChannel<T>
é um erro. O Room recomenda o uso deFlow
seguido das funções vizinhas para converter oFlow
emChannel
(b/130428884). - Projeções de expansão: foi adicionada uma nova opção de compilador experimental
room.expandProjection
, que faz com que o Room reescreva uma consulta com uma projeção em estrela para conter apenas as colunas no tipo de retorno POJO. Por exemplo, para um método DAO com@Query("SELECT * FROM Song")
que retorna um POJO chamadoSongIdAndTitle
com apenas dois campos. Em seguida, o Room vai reescrever a consulta paraSELECT id, title FROM Song
, de forma que o conjunto mínimo de colunas para satisfazer o tipo de retorno seja buscado. Isso basicamente elimina o avisoCURSOR_MISMATCH
que é apresentado quando a consulta retorna colunas extras que não correspondem a nenhum campo no tipo POJO retornado. onDestructiveMigrate
é uma nova API callback adicionada aRoomDatabase.Callback
para quando o Room migra destrutivamente um banco de dados (b/79962330).
Correções de bugs
- Correção de um bug em que o Room gerava um código incorreto usando um método como setter de campo quando o campo era protegido (b/136194628).
- Correção de um bug que fazia o InvalidationTracker lançar um NPE em um segundo processo quando a invalidação de várias instâncias era ativada e o serviço de invalidação era eliminado (b/123454915).
- Um bug em que o Room não identificava corretamente o tipo de retorno de uma
função de suspensão legada anotada com
@RawQuery
foi corrigido (b/137878827). - Atualização do código gerado para
@Relation
quando a chave relacionada é do tipo BLOB para usar umByteBuffer
comparável (b/137881998). - Um bug em que o Room informava a ausência de setters nos POJOs usados como
parâmetros parciais da entidade de
@Insert
,@Update
e@Delete
foi corrigido (b/138664463). - Um bug em que o Room informava a ausência de getters e setters para uma
coluna ignorada com
@Entity
quando a classe de entidade era usada em determinados métodos DAO foi corrigido (b/138238182). - Um bug em que o Room não convertia corretamente argumentos de vinculação nomeados em argumentos posicionais, causando uma exceção de execução de uma consulta com parâmetros reutilizados foi corrigido (b/137254857).
Versão 2.2.0-alpha01
10 de julho de 2019
Novos recursos
- Banco de dados pré-empacotado: duas novas APIs em
RoomDatabase.Builder
agora estão disponíveis para criar umRoomDatabase
dado um arquivo de banco de dados já preenchido.createFromAsset()
é usado quando o arquivo de banco de dados pré-preenchido está na pasta de recursos do APK, enquantocreateFromFile()
é usado quando o arquivo está em um local arbitrário. Os usos dessas APIs modificam o comportamento das migrações destrutivas de modo que, durante uma migração substituta, o Room vai tentar copiar novamente o banco de dados pré-preenchido, se disponível. Caso contrário, ela vai substituir e recriar todas as tabelas (b/62185732). - Valores padrão do esquema:
@ColumnInfo
agora tem uma nova propriedade,defaultValue
, que pode ser usada para especificar o valor padrão de uma coluna. Os valores padrão fazem parte de um esquema do banco de dados e vão ser validados durante as migrações, se especificados (b/64088772).Observação: se o esquema do banco de dados já tiver valores padrão, como os adicionados com
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, e você decidir definir valores padrão usando@ColumnInfo
para as mesmas colunas, talvez seja necessário fornecer uma migração para validar os valores padrão não contabilizados. Consulte Migrações do Room para ver mais informações. - Relações muitos para muitos:
@Relation
agora tem uma nova propriedadeassociateBy
, que usa uma nova anotação@Junction
, aplicada para declarar uma relação que precisa ser satisfeita por uma tabela de junção, também conhecida como "tabela mesclada" (b/69201917). - Relações um para um: a restrição nos campos de POJO anotados com
@Relation
para serem do tipoList
ouSet
foi cancelada, permitindo efetivamente relações de valor único representado (b/62905145). - Entidade de destino: as anotações DAO
@Insert
,@Update
e@Delete
agora têm uma nova propriedadetargetEntity
, que permite especificar a tabela de destino em que o método DAO vai atuar. Isso permite que os parâmetros desses métodos DAO sejam POJOs arbitrários, que serão interpretados como entidades parciais. Na prática, isso permite inserções, exclusões e atualizações parciais (b/127549506). - Processador de anotações incremental do Gradle: o Room agora é um processador de anotações de isolamento
Gradle, e a incrementabilidade pode ser ativada com a opção
room.incremental
do processador. Consulte Opções do compilador do Room para ver mais informações. Caso encontre algum problema, informe um bug neste link. Planejamos ativar a incrementabilidade por padrão em uma versão futura e estável. b/112110217, link em inglês.
Correções de bugs
- O Room não vai mais propagar a
EmptySetResultException
para o gerenciador de erros global quando o fluxo Rx de uma consulta for descartado antes da conclusão dela (b/130257475). - Um bug em que o Room mostrava uma mensagem de erro incorreta quando uma função
DAO de suspensão anotada com
@RawQuery
não tinha um tipo de retorno foi corrigido (b/134303897). - O Room não vai mais gerar adaptadores DAO com tipos brutos (b/135747255).
Versão 2.1.0
Versão 2.1.0
13 de junho de 2019
Lançamento do Room 2.1.0 sem mudanças em relação à versão 2.1.0-rc01
. As confirmações incluídas nessa versão podem ser encontradas neste link.
Mudanças importantes desde a versão 2.0.0
- FTS: o Room agora oferece suporte a entidades com uma tabela
de mapeamento FTS3 ou FTS4. As classes anotadas com
@Entity
agora podem ser anotadas com@Fts3
ou@Fts4
para declarar uma classe com uma tabela de pesquisa de texto completo de mapeamento. As opções de FTS para personalização mais detalhada estão disponíveis usando os métodos da anotação. - Visualizações: o Room agora oferece suporte à declaração de uma classe como uma consulta armazenada, também conhecida
como visualização (link em inglês), usando a anotação
@DatabaseView
. - Corrotinas: os métodos DAO agora podem ser funções de suspensão. Inclua
room-ktx
nas suas dependências para usar essa funcionalidade. O artefato ktx também fornece a função de extensãoRoomDatabase.withTransaction
para realizar transações de banco de dados em uma corrotina. - Valor automático: o Room agora tem suporte à declaração
de classes com a anotação AutoValue
como entidades e POJOs. As anotações do Room
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
agora podem ser declaradas nos métodos abstratos de uma classe anotada de valor automático. Essas anotações também precisam ser acompanhadas por@CopyAnnotations
para que o Room as entenda corretamente. - Suporte assíncrono adicional: métodos DAO anotados com
@Insert
,@Delete
ou@Update
, com@Query
contendoINSERT
,DELETE
ouUPDATE
, agora são compatíveis com tipos de retorno RxCompletable
,Single
,Maybe
e o tipo de retorno de GuavaListenableFuture
e também podem ser funções de suspensão. enableMultiInstanceInvalidation
: é uma nova API emRoomDatabase.Builder
para ativar a invalidação em várias instâncias de RoomDatabase usando o mesmo arquivo de banco de dados.fallbackToDestructiveMigrationOnDowngrade
é uma nova API emRoomDatabase.Builder
para recriar automaticamente o banco de dados caso ocorra um downgrade.ignoredColumns
é uma nova API na anotação@Entity
que pode ser usada para listar campos ignorados por nome.- Agora, o Room usará corretamente o construtor principal do Kotlin nas classes de dados, evitando a necessidade de declarar as propriedades como
vars
.
Versão 2.1.0-rc01
29 de maio de 2019
Correções de bugs
- Um erro de inicialização do Room que poderia ocorrer devido a uma configuração de temp_store já definida foi corrigido (b/132602198).
- Correção de um aviso do uso de dupla citação para usuários com o SQLite 3.27.0 e mais recentes (b/131712640).
- Um bug em que o InvalidationTracker causava uma falha quando várias verificações de invalidação ocorriam em paralelo foi corrigido (b/133457594).
Versão 2.1.0-beta01
7 de maio de 2019
Lançamento do androidx.room 2.1.0-beta01
sem alterações do 2.1.0-alpha07. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).
Versão 2.1.0-alpha07
25 de abril de 2019
Mudanças de API / comportamento
- A função de extensão
RoomDatabase.withTransaction
foi modificada para não usar mais um bloco de funções com umCoroutineScope
como receptor. Isso evita que o wrappercoroutineScope { }
extra necessário para determinadas execuções simultâneas no bloco de transações seja ignorado.
Correções de bugs
- Um bug em que o Room não correspondia a um TypeConversor para uma função DAO do Kotlin contendo um parâmetro do tipo de coleção foi corrigido (b/122066791).
Versão 2.1.0-alpha06
22 de março de 2019
Mudanças de API / comportamento
- As consultas de transação assíncrona agora são serializadas, de modo que o Room não utilizará mais de uma linha de execução para transações de banco de dados.
RoomDatabase.Builder.setTransactionExecutor(Executor)
foi adicionado para permitir a configuração do executor a ser usado para transações. RoomDatabase.runInTransaction(Callable)
não incluirá mais as exceções verificadas em RuntimeExceptions (b/128623748).
Correções de bugs
- Um bug em que o rastreador de invalidação parava de observar uma tabela de conteúdo se observadores da tabela de conteúdo e de tabela FTS de conteúdo externo fossem adicionados foi corrigido (b/128508917).
- Atualização da gramática SQLite do Room para corresponder ao SQLite 3.24.0 (b/110883668).
Versão 2.1.0-alpha05
13 de março de 2019
Novos recursos
- A função de extensão
RoomDatabase.withTransaction
permite realizar transações seguras de banco de dados em uma corrotina. As funções de extensão do Room, assim como o suporte a corrotinas, estão disponíveis no artefatoroom-ktx
. - Métodos DAO não abstratos anotados com
@Transaction
agora podem ser funções de suspensão (b/120241587).
Mudanças de API / comportamento
- Renomeação das
room-coroutines
de artefato pararoom-ktx
, seguindo a mesma nomeação de outros artefatos do AndroidX. beginTransaction
,setTransactionSuccessful
eendTransaction
emRoomDatabase
foram descontinuados e substituídos porrunInTransaction
e a função de extensãoroom-ktx
withTransaction
.
Correções de bugs
- Correção de um bug em que os argumentos do tokenizer estavam sendo descartados se o tokenizer usado fosse SIMPLE. b/125427014
- Correção de um bug em que o Room não identificava corretamente as funções de suspensão com parâmetros cujo tipo era uma classe interna (b/123767877).
- Um bug em que o método DAO
@Query
adiado com instruçõesINSERT
,UPDATE
ouDELETE
preparava a consulta na linha de execução principal foi corrigido (b/123695593). - Vários bugs em que o Room gerava código incorreto para determinadas funções de suspensão foram corrigidos (b/123466702 e b/123457323).
- Correção de um bug em que o uso obsoleto de métodos não era suprimido corretamente no código gerado. b/117602586
- Atualização da dependência do Room do androidx.sqlite para a versão 1.0.2, que contém correções para gerenciar corretamente bancos de dados corrompidos. b/124476912
Problemas conhecidos
- O Room 2.1.0-alpha05 depende do artefato
kotlinx-metadata-jvm
, que não está disponível no momento no Maven Central (KT-27991, link em inglês). Essa dependência pode ser resolvida com a adição demaven { url "https://kotlin.bintray.com/kotlinx/" }
aos repositórios de projeto.
Versão 2.1.0-alpha04
25 de janeiro de 2019
Novos recursos
- Métodos DAO anotados com
@Query
contendo instruçõesINSERT
,UPDATE
ouDELETE
agora podem retornar tipos assíncronosSingle
,Mayble
,Completable
eListenableFuture
. Além disso, eles também podem ser funções suspensas. b/120227284
Mudanças de API / comportamento
- O Room vai gerar um erro se um método DAO não abstrato anotado com
@Transaction
retornar um tipo assíncrono comoSingle
,Mayble
,Completable
,LiveData
ouListenableFuture
. Como as transações são confinadas pela linha de execução, atualmente o Room não pode iniciar e finalizar uma transação em torno de uma função que pode realizar consultas em diferentes linhas de execução (b/120109336). OnConflictStrategy.FAIL
eOnConflictStrategy.ROLLBACK
foram@Deprecated
(descontinuados), porque não se comportam como esperado com as vinculações SQLite atuais do Android (b/117266738).
Correções de bugs
- Correção de um bug em que o Room não usava corretamente o TypeConverter de um tipo de retorno se o método DAO fosse uma função de suspensão (b/122988159).
- Um bug em que o Room identificava incorretamente as funções de suspensão herdadas como funções que não são de suspensão foi corrigido (b/122902595).
- Correção de um bug em que o Room gerava um código incorreto quando um campo
@Embedded
estava em uma classe pai e era usado em várias classes filhas (b/121099048). - Um problema em que o banco de dados gerava um impasse ao invocar funções DAO suspensas entre uma
beginTransaction()
e umaendTransaction()
foi corrigido (b/120854786).
Versão 2.1.0-alpha03
4 de dezembro de 2018
Mudanças na API
- O
tokenizer
FTS em@Fts3
/@Fts4
agora usa uma String em vez de um Enum. Isso permite que tokenizers personalizados sejam usados pelo Room. Os tokenizers integrados ainda são definidos emFtsOptions
como constantes de string. b/119234881
Novos recursos
- Corrotinas: os métodos DAO agora podem ser funções de suspensão. Para suporte a funções de suspensão no Room, foi lançado um novo artefato, o
room-coroutines
. (b/69474692). - Os métodos DAO anotados com
@Insert
,@Delete
ou@Update
agora são oferecem suporte aListenableFuture
como tipo de retorno (b/119418331).
Correções de bugs
- Um bug em que o Room tentava incorretamente encontrar um construtor com colunas na propriedade
ignoredColumns
de@Entity
foi corrigido (b/119830714). - Correção de um bug em que o Room não marcava os parâmetros do método DAO como finais na implementação gerada (b/118015483).
- Correção de um bug em que o processador do Room falhava ao relatar um erro em uma consulta com símbolos especiais (b/119520136).
- Correção de um bug em que o Room recusava diversas outras implementações
Collection
como argumentos de uma expressãoIN
(b/119884035). - Correção de um bug em que o LiveData retornado do Room receberia lixo coletado quando observado para sempre, fazendo com que ele deixasse de emitir novos dados (b/74477406).
- Atualização do bloqueio de fechamento do
RoomDatabase
para reduzir a contenção de bloqueio (b/117900450).
Versão 2.1.0-alpha02
30 de outubro de 2018
Novos recursos
- Foi adicionado suporte para fazer referência a
@DatabaseView
em um@Relation
(b/117680932).
Correções de bugs
- Um bug em que o Room executava E/S de disco no encadeamento principal ao assinar e descartar um tipo de retorno Rx foi corrigido (b/117201279).
- Um bug em que o Room não conseguia encontrar um conversor de tipo adequado para um campo em uma classe de entidade Kotlin foi corrigido (b/111404868).
- Um bug em que o Room gerava código incorreto para uma implementação da interface
DAO
que continha um método padrão de Kotlin que não tinha argumentos foi corrigido (b/117527454). - Atualização do analisador de gramática do SQLite do Room, corrigindo um problema de desempenho que causaria longos tempos de compilação (b/117401230).
Versão 2.1.0-alpha01
8 de outubro de 2018
Novos recursos
- FTS: o Room agora oferece suporte para entidades com uma tabela de mapeamento FTS3 ou FTS4. As classes anotadas com
@Entity
agora podem ser anotadas com@Fts3
ou@Fts4
para declarar uma classe com uma tabela de pesquisa de texto completo de mapeamento. Opções de FTS para mais personalização estão disponíveis usando métodos da anotação (b/62356416). - Views: o Room agora tem suporte à declaração de uma classe como consulta armazenada, também conhecida como view (link em inglês), usando a anotação @DatabaseView (b/67033276).
- Valor automático: o Room agora oferece suporte para a declaração de classes com a anotação AutoValue (link em inglês) como entidades e POJOs. As anotações do Room
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
agora podem ser declaradas nos métodos abstratos de uma classe anotada de valor automático. Essas anotações também precisam ser acompanhadas por@CopyAnnotations
para que o Room os interprete corretamente (b/62408420). - Suporte a outros tipos de retorno Rx: métodos do DAO anotados com
@Insert
,@Delete
ou@Update
agora oferecem suporte aos tipos de retorno RxCompletable
,Single<T>
eMaybe<T>
(b/63317956). - Tipos imutáveis com
@Relation
: o Room antes exigia que os campos anotados@Relation
fossem configuráveis, mas agora podem ser parâmetros do construtor. enableMultiInstanceInvalidation
: é uma nova API emRoomDatabase.Builder
para ativar a invalidação em várias instâncias de RoomDatabase usando o mesmo arquivo de banco de dados. Esse mecanismo de invalidação de várias instâncias também funciona em vários processos (b/62334005).fallbackToDestructiveMigrationOnDowngrade
: é uma nova API emRoomDatabase.Builder
para recriar automaticamente o banco de dados em caso de downgrade (b/110416954).ignoredColumns
: é uma nova API na anotação@Entity
que pode ser usada para listar campos ignorados por nome. Útil para ignorar campos herdados em uma entidade. b/63522075
Mudanças de API / comportamento
mCallback
emDatabase
emRoomDatabase
foram@Deprecated
(descontinuados) e vão ser removidos na próxima versão principal do Room (b/76109329).
Correções de bugs
- Dois problemas em que o Room não se recuperava corretamente de um banco de dados corrompido ou de uma migração incorreta durante a inicialização foram corrigidos (b/111504749, b/111519144).
- O Room agora vai usar corretamente o construtor principal do Kotlin em classes de dados, evitando a necessidade de declarar os campos como
vars
(b/105769985).
Versão 2.0.0
Versão 2.0.0
1º de outubro de 2018
androidx.room 2.0.0
é lançado sem mudanças desde a versão 2.0.0-rc01.
Versão 2.0.0-rc01
20 de setembro de 2018
Lançamento do androidx.room 2.0.0-rc01
sem alterações desde o 2.0.0-beta01.
Versão 2.0.0-beta01
2 de julho de 2018
Mudanças de API / comportamento
RoomDatabase.Builder.setQueryExecutor()
foi adicionado para permitir a personalização do local em que as consultas são executadas.- Inclusão de suporte a RxJava2
Observable
- As implementações de DAO e de banco de dados geradas agora são finais.
Correções de bugs
- Especificação da classe/nome do campo no erro "não é possível encontrar o getter para o campo". b/73334503
- Correção da retrocompatibilidade de RoomOpenHelper com versões anteriores do Room. b/110197391
Dependências anteriores ao AndroidX
Para as versões do Room anteriores ao AndroidX, inclua estas dependências:
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"
}
Versão 1.1.1
Versão 1.1.1
19 de junho de 2018
O Room 1.1.1
é idêntica ao Room 1.1.1-rc1
.
Versão 1.1.1-rc1
16 de maio de 2018
É altamente
recomendável usar o Room 1.1.1-rc1
em vez do 1.1.0
se você estiver usando migrações.
Correção de um bug em que o Room não processava corretamente a inicialização pós-migração (b/79362399).
Versão 1.1.0
Versão 1.1.0-beta3
19 de abril de 2018
Correções de bugs
- O erro de compilação quando um POJO do Kotlin faz referência a uma entidade relacional que foi definida no Java foi corrigido (b/78199923).
Versão 1.1.0-beta2
5 de abril de 2018
Correções de bugs
Foi corrigido um bug crítico nas implementações
Single
eMaybe
Rx do Room, em que a consulta era reciclada antecipadamente, causando problemas se você adicionasse mais de um observador às instânciasSingle
ouMaybe
retornadas (b/76031240).[RoomDatabase.clearAllTables][ref-clearAllTables] não
VACUUM
o banco de dados se for chamado dentro de uma transação (b/77235565).
Versão 1.1.0-beta1
21 de março de 2018
Mudanças na API
- Com base no feedback da Revisão da API,
@RawQuery
não aceita mais a transmissão de umaString
como parâmetro de consulta. Você precisa usar [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (consulte [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] para criar facilmente uma instância de [SupportSQLiteQuery][ref-SupportSQLiteQuery] com compatibilidade a argumentos). - O método [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] do RoomDatabase.Builder agora aceita
vararg int
, em vez devararg Integer
.
Correções de bugs
- Agora, [RoomDatabase.clearAllTables][ref-clearAllTables] tenta retornar espaço para o sistema operacional definindo um checkpoint WAL e realizando
VACUUM
no banco de dados. - Agora, [
@RawQuery
][ref-RawQuery] aceita qualquer Pojo para a propriedadeobservedEntities
, desde que ele faça referência a uma ou mais entidades nos camposEmbedded
ouRelation
s (b/74041772). - Paging: a implementação de DataSource do Room agora lida corretamente com dependências de várias tabelas (como relações e mesclagens). Anteriormente, essas falhas não acionavam novos resultados ou podiam ocorrer falhas de compilação (b/74128314).
Versão 1.1.0-alpha1
22 de janeiro de 2018
Novos recursos
RawQuery
: essa nova API permite que os métodos@Dao
recebam o SQL como um parâmetro de consulta (b/62103290, b/71458963).fallBackToDestructiveMigrationsFrom
: essa nova API emRoomDatabase.Builder
proporciona um controle mais refinado, com que as migrações destrutivas de versões iniciais do esquema são permitidas (em relação a fallbackToDestructiveMigration) (b/64989640).- O Room agora tem suporte apenas às APIs Paging mais atualizadas (alpha-4 ou mais recente). O suporte ao
LivePagedListProvider
foi descontinuado. Para usar a nova Room Alfa, é necessário usar a Pagingalpha-4
ou mais recente e mudar doLivePagedListProvider
para oLivePagedListBuilder
, se ainda não tiver feito isso.
Correções de bugs
- Compatibilidade aprimorada para os tipos Kotlin Kapt. b/69164099
- A ordem dos campos não invalida mais o esquema (b/64290754).