Room

A biblioteca de persistência Room oferece uma camada de abstração sobre o SQLite para permitir um acesso mais robusto ao banco de dados, aproveitando toda a capacidade do SQLite.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
30 de outubro de 2024 2.6.1 - - 2.7.0-alpha11

Declarar dependências

Para inserir uma dependência no 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:

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("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")
}

Groovy

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    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:$room_version"
}

Para mais informações sobre como usar o plug-in KAPT, consulte a documentação do KAPT.

Para saber como usar o plug-in da KSP, consulte a documentação de início rápido da KSP.

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 tem as seguintes opções de processador de anotações.

room.schemaLocation directory
Permite exportar esquemas de banco de dados para arquivos JSON no diretório especificado. Consulte Migrações do Room para mais informações.
room.incremental boolean
Ativa o processador de anotações incrementais do Gradle. O valor padrão é true.
room.generateKotlin boolean
Gere arquivos de origem Kotlin em vez de Java. Requer KSP. O valor padrão é false. Consulte as notas da versão 2.6.0 para mais detalhes.

Usar o Plug-in do Gradle para Room

Com o Room 2.6.0 e versões mais recentes, você pode usar o plug-in do Gradle para configurar opções para o compilador do Room. O plug-in configura o projeto para que os esquemas gerados (que são uma saída das tarefas de compilação e são consumidos para migrações automáticas) sejam configurados corretamente para ter builds reproduzíveis e armazenáveis em cache.

Para adicionar o plug-in, no arquivo de build do Gradle de nível superior, defina o plug-in e a versão dele.

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

No arquivo de build do Gradle no nível do módulo, aplique o plug-in e use a extensão room.

Groovy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

A configuração de um schemaDirectory é necessária ao usar o Plug-in do Gradle para Room. Isso vai configurar o compilador do Room e as várias tarefas de compilação e os back-ends (javac, KAPT, KSP) para gerar arquivos de esquema em pastas com sabores, por exemplo, schemas/flavorOneDebug/com.package.MyDatabase/1.json. Esses arquivos precisam ser verificados no repositório para serem usados para validação e migrações automáticas.

Algumas opções não podem ser configuradas em todas as versões do plug-in do Gradle do Room, mesmo que tenham suporte do compilador do Room. A tabela abaixo lista cada opção e mostra a versão do plug-in do Room para Gradle que adicionou suporte para configurar essa opção usando a extensão room. Se a sua versão for anterior ou se a opção ainda não estiver disponível, use as opções do processador de anotações.

Opção Desde a versão
room.schemaLocation (obrigatório) 2.6.0
room.incremental -
room.generateKotlin -

Usar opções do processador de anotações

Se você não estiver usando o plug-in do Gradle do Room ou se a opção desejada não tiver suporte à sua versão do plug-in, será possível configurar o Room usando as opções do processador de anotações, conforme descrito em Adicionar dependências de build. A forma como as opções de anotação são especificadas depende do uso da KSP ou do KAPT para o 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...
                )
            }
        }
    }
}

Como room.schemaLocation é um diretório e não um tipo primitivo, é necessário usar um CommandLineArgumentsProvider ao adicionar essa opção para que o Gradle saiba sobre esse diretório ao realizar verificações atualizadas. Migrar o banco de dados do Room mostra uma implementação completa de CommandLineArgumentsProvider que fornece o local do esquema.

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.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 2.7

Versão 2.7.0-alpha11

30 de outubro de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha11. A versão 2.7.0-alpha11 contém estas confirmações.

Mudanças na API

  • Revise a assinatura do método convertRows() recém-adicionada para que seja uma função de suspensão que recebe um RawRoomQuery para paginação de sala. (Ie57b5, b/369136627).

Correções de bugs

  • Correção do problema na paginação do Room em que um código inválido era gerado ao usar @Relation com PagingSource

Versão 2.7.0-alpha10

16 de outubro de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha10. A versão 2.7.0-alpha10 contém estas confirmações.

Mudanças na API

  • Criação da classe ByteArrayWrapper interna para oferecer suporte a relações com ByteBuffer em plataformas que não são Android e JVM. (I75543, b/367205685).
  • Adicione SQLiteStatement.getColumnType() com as várias constantes de resultado de SQLITE_DATA_* para permitir a recuperação do tipo de dados de uma coluna. (I1985c, b/369636251).

Versão 2.7.0-alpha09

2 de outubro de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha09. A versão 2.7.0-alpha09 contém estas confirmações.

Correções de bugs

  • Foi corrigido um problema com a implementação de KMP de room-paging que causava uma Error code: 8, message: attempt to write a readonly database devido ao início de uma transação de gravação em uma conexão de leitura (b/368380988).

Versão 2.7.0-alpha08

18 de setembro de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha08. A versão 2.7.0-alpha08 contém estas confirmações.

Novos recursos

  • Os artefatos room-paging foram migrados para serem compatíveis com o KMP. (Ib8756, b/339934824).
  • A API invalidationTrackerFlow() foi padronizada como uma API própria como InvalidationTracker.createFlow() e agora está disponível para conjuntos de origem que não são do Android em projetos do KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924).

Mudanças na API

  • Todos os avisos e mensagens de erro no Room que usam a palavra Cursor foram removidos ou substituídos, porque Cursor não é mais um termo geral preciso para usar na versão KMP do Room. (Id8cd9, b/334087492).

Correções de bugs

  • Correção de um problema em que o KMP do Room tentava emitir código usando UUID para plataformas não JVM (b/362994709).
  • Correção de um problema com o plug-in do Gradle do Room que causava um erro como "Não é possível mudar os atributos da configuração… depois que ela foi bloqueada para mutação" ao ser usado em um projeto do KMP com o Compose Multiplatform. (b/343408758).

Versão 2.7.0-alpha07

21 de agosto de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha07. A versão 2.7.0-alpha07 contém estas confirmações.

Novos recursos

  • O plug-in do Gradle do Room agora vai adicionar automaticamente os esquemas exportados às origens de recursos do teste de instrumentação do Android para que possam ser usados pelo MigrationTestHelper.

Correções de bugs

  • Correção de um problema com o "real" gerado da RoomDatabaseConstructor que não tem o modificador "real" na função initialize se essa função também for substituída na declaração de "expect". (359631627).
  • Correção de um problema com o valor "real" gerado da RoomDatabaseConstructor, que não correspondia à visibilidade da declaração "espera". (358138953).

Versão 2.7.0-alpha06

7 de agosto de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha06. A versão 2.7.0-alpha06 contém estas confirmações.

Mudanças na API

  • Mude a configuração de instanciação de um RoomDatabase em um projeto do KMP.

Devido ao modelo de compilação do Kotlin 2.0, a estratégia de referenciar uma função a ser gerada, chamada instantiateImpl(), é mais viável. Duas novas APIs, @ConstructedBy e RoomDatabaseConstructor, foram introduzidas para substituir a estratégia instantiateImpl(). A nova estratégia é a seguinte:

  1. Definir um objeto esperado que implemente RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Vincule o objeto à declaração @Database usando @ConstructedBy.

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. Criar uma nova instância de banco de dados sem transmitir um argumento de fábrica

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

Correção de b/316978491, b/338446862 e b/342905180.

  • Compatibilidade com @RawQuery no Room KMP pela adição de uma nova API chamada RoomRawQuery, que é semelhante a SupportSQLiteQuery em termos de retenção na string SQL bruta e uma função para vincular argumentos a uma instrução. As funções com anotações @RawQuery agora podem aceitar um RoomRawQuery como seu único parâmetro. (Iea844, b/330586815).
  • Adicione uma sobrecarga de setQueryCallback() que aceite um CoroutineContext. (Id66ff, b/309996304).
  • Foi adicionado suporte a destinos linuxArm64 Kotlin Multiplatform (I139d3, b/338268719).

Correções de bugs

  • Correção de um problema em que o Room gerava incorretamente uma chamada para recursiveFetchArrayMap em destinos que não são do Android (710c36, b/352482325).
  • Correção de um problema em que o Room às vezes gerava uma exceção sobre "Tempo limite excedido ao tentar uma conexão" em um projeto do KMP. (fa72d0, b/347737870).
  • Correção de um problema em migrações automáticas que verificava chaves externas muito cedo, antes que outras tabelas mudassem os esquemas para se adequar às novas chaves externas. (7672c0, b/352085724).

Versão 2.7.0-alpha05

10 de julho de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha05. A versão 2.7.0-alpha05 contém estas confirmações.

Mudanças na API

  • SQLiteKt foi renomeado como SQLite, e BundledSQLiteKt foi renomeado como BundledSQLite (I8b501).

Correções de bugs

  • Correção de um bug em que um RoomDatabase causava um deadlock ou um erro com um tempo limite de conexão ao usar o AndroidSQLiteDriver.

Versão 2.7.0-alpha04

12 de junho de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha04. A versão 2.7.0-alpha04 contém estas confirmações.

Correções de bugs

  • Correção de um problema no processador de anotações do Room que gerava um código KMP incompatível quando um tipo de retorno multimapa era definido em um DAO. (b/340983093).
  • Correção de um problema em que o Room não conseguia encontrar a implementação do banco de dados gerada se a classe anotada @Database não tivesse um pacote (b/342097292).
  • Correção de um problema em que a ativação do fechamento automático e da invalidação de várias instâncias às vezes causava uma ConcurrentModificationException quando o banco de dados era fechado automaticamente por estar inativo.

Versão 2.7.0-alpha03

29 de maio de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha03. A versão 2.7.0-alpha03 contém estas confirmações.

Correções de bugs

  • Correção de vários problemas relacionados ao Kotlin 2.0 e ao KSP 2.0. O Kotlin 2.0 com suporte ao KSP 2 não está completo, e a equipe está trabalhando nas várias APIs e mudanças de comportamento no novo compilador. (b/314151707).

Versão 2.7.0-alpha02

14 de maio de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha02. A versão 2.7.0-alpha02 contém estas confirmações.

Correções de bugs

  • Correção de vários problemas do KSP.

Versão 2.7.0-alpha01

1º de maio de 2024

Lançamento de androidx.room:room-*:2.7.0-alpha01. A versão 2.7.0-alpha01 contém estas confirmações.

Novos recursos

  • Suporte ao Kotlin Multiplatform (KMP): nesta versão, o Room foi refatorizado para se tornar uma biblioteca Kotlin Multiplatform (KMP). Embora ainda haja trabalho a ser feito, esta versão apresenta uma nova versão do Room em que a maioria das funcionalidades foi "padronizada" (feita para ser multiplataforma). As plataformas com suporte atuais são Android, iOS, JVM (computador), Mac nativo e Linux nativo. As funcionalidades que faltarem nas novas plataformas compatíveis serão consideradas com todos os recursos nas próximas versões do Room.

Para mais informações sobre como começar a usar o Room KMP, consulte a documentação oficial do Room KMP.

  • A geração de código Kotlin no KSP foi ativada por padrão se o processamento for feito pelo KSP. Para projetos somente Java ou KAPT, o Room ainda vai gerar origens Java.

Mudanças na API

  • Uma sobrecarga de Room.databaseBuilder() foi adicionada e recebe um parâmetro lambda que deve ser usado com uma função gerada pelo Room para evitar o uso de reflexão ao instanciar a implementação RoomDatabase gerada. Exemplo de uso:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • Uma API para configurar um Room com um CoroutineContext foi adicionada ao builder: RoomDatabase.Builder.setQueryCoroutineContext. Um RoomDatabase só pode ser configurado com um dos executores usando setQueryExecutor ou com um contexto de corrotina, mas não com ambos.
  • Foi adicionada uma API para configurar o Room com um driver SQLite: RoomDatabase.Builder.setDriver(). Para mais informações sobre a API Driver SQLite, consulte a documentação do KMP do SQLite.
  • Foram adicionadas APIs para acessar o SQLiteConnection subjacente de APIs de driver: RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection.
  • Vários callbacks relacionados ao Room agora têm uma versão sobrecarregada que recebe SQLiteConnection em vez de SupportSQLiteDatabase. Eles devem ser substituídos ao migrar para um projeto KMP. Para mais informações sobre como migrar os usos do Room em um app Android para um módulo KMP comum, consulte o guia de migração. Os callbacks são:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • O artefato KTX androidx.room:room-ktx foi mesclado a androidx.room:room-runtime com todas as APIs. O artefato agora está em branco. Remova-o da lista de dependências.

Versão 2.6

Versão 2.6.1

29 de novembro de 2023

Lançamento de androidx.room:room-*:2.6.1. A versão 2.6.1 contém estas confirmações.

Correções de bugs

  • Problema resolvido no código gerado em que o valor padrão para colunas duplas em EntityCursorConverter era definido como 0 em vez de 0,0. Também incluímos uma possível correção para um caso extremo semelhante de colunas do tipo flutuante. (Id75f5, b/304584179).
  • As exceções geradas de carregamentos PagingSource agora serão propagadas como um LoadStateUpdate de LoadResult.Error contendo o Throwable. Esse estado de erro pode ser observado em PagingDataAdapter.loadStateFlow(Views) ou LazyPagingItems.loadState(Compose). Isso marca uma mudança comportamental em que os erros de carga anteriores vão ser mostrados como uma exceção gerada pelo método dao que acionou a carga. (I93887, b/302708983).

Versão 2.6.0

18 de outubro de 2023

Lançamento de androidx.room:room-*:2.6.0. A versão 2.6.0 contém estas confirmações.

Mudanças importantes desde a versão 2.5.0

  • A opção de ativar a geração de código Kotlin (ou "Kotlin CodeGen") agora está disponível no Room KSP. (4297ec0). Para ativar o Kotlin CodeGen no Room, adicione o nome da opção room.generateKotlin às opções do processador para o KSP. Para mais detalhes sobre como transmitir opções de processador para a KSP, consulte a documentação da KSP.

Observação:ao usar o Kotlin CodeGen, é importante observar que há outras restrições. Propriedades abstratas como getters DAO ou consultas DAO no CodeGen Kotlin não são permitidas. Em vez disso, elas precisam ser reescritas como funções para evitar a noção falsa de que o valor da propriedade é imutável e tem um resultado armazenado fixo. Outra restrição que foi adicionada é que os tipos de retorno de coleção Nullable não são mais permitidos no Room para CodeGen do Kotlin.

Aviso:seus projetos podem ser mais rigorosos em termos de nulidade ao usar o CodeGen do Kotlin. No CodeGen do Kotlin, a nulidade dos argumentos de tipo é importante. Em Java, isso é ignorado principalmente. Por exemplo, digamos que você tenha um tipo de retorno "Flow<foo\>" e a tabela esteja vazia. No CodeGen Java, isso não vai causar problemas, mas no Kotlin, você vai receber um erro. Para evitar isso, use `Flow<foo?\>`, supondo que um valor nulo seja emitido. </foo?\></foo\>

  • O novo artefato do plug-in do Gradle para Room foi adicionado com o id androidx.room, que resolve vários problemas existentes no Room relacionados a entradas e saídas de esquemas usando as opções do processador de anotações do Gradle. Para mais detalhes, consulte as notas da versão da Room 2.6.0-alpha02.
  • As classes de valor nas entidades do Room agora têm suporte para KSP. (4194095).
  • Os tipos de retorno de mapa aninhados em funções DAO agora são aceitos no Room. (I13f48, 203008711).

Versão 2.6.0-rc01

20 de setembro de 2023

Lançamento de androidx.room:room-*:2.6.0-rc01. A versão 2.6.0-rc01 contém estas confirmações.

Versão 2.6.0-beta01

23 de agosto de 2023

Lançamento de androidx.room:room-*:2.6.0-beta01. A versão 2.6.0-beta01 contém estas confirmações.

Correções de bugs

  • Tratamento da exceção especial SQLite durante a inserção de atualização encontrada quando a exceção 2067 SQLITE_CONSTRAINT_UNIQUE é gerada durante uma inserção de atualização. A inserção de atualização precisa realizar uma atualização. (If2849, b/243039555).

Versão 2.6.0-alpha03

9 de agosto de 2023

Lançamento de androidx.room:room-*:2.6.0-alpha03. A versão 2.6.0-alpha03 contém estas confirmações.

Novos recursos

  • Os tipos de retorno de mapa aninhados em funções DAO agora são aceitos no Room. (I13f48, 203008711).

Mudanças na API

  • Uma nova anotação de tipo chamada @MapColumn foi criada para substituir @MapInfo, que foi descontinuada. Para cada nome de coluna (keyColumnName, valueColumnName ou ambos) fornecido em uma anotação @MapInfo, é necessário declarar uma anotação @MapColumn apenas com columnName e usar a anotação no argumento de tipo específico que está sendo referenciado (a chave ou o valor do mapa) no tipo de retorno da função DAO. Isso ocorre porque a anotação @MapColumn é usada diretamente no argumento de tipo dentro do tipo de retorno de uma função DAO, em vez da própria função, como @MapInfo. Para mais informações, consulte a documentação do @MapColumn. (Ib0305, b/203008711).
  • Os arquivos da API foram atualizados para anotar a supressão de compatibilidade (I8e87a, b/287516207).
  • As APIs do plug-in do Gradle do Room foram atualizadas para não exigirem sempre configurações por variante. Isso significa que o plug-in pode aceitar um local global para todas as variantes sem criar vários diretórios, permitindo migrações mais suaves, mas também é flexível o suficiente para configurar manualmente os sabores ou criar esquemas de tipo, mantendo os benefícios do plug-in (builds reproduzíveis e com armazenamento em cache). (I09d6f, b/278266663).

Correções de bugs

  • Correção da vulnerabilidade potencial de vazamento de memória em QueryInterceptorStatement. (I193d1).
  • Correção de comportamento incorreto na função QueryInterceptorDatabase execSQL(). (Iefdc8).

Versão 2.6.0-alpha02

21 de junho de 2023

Lançamento de androidx.room:room-*:2.6.0-alpha02. A versão 2.6.0-alpha02 contém essas confirmações.

Plug-in do Gradle para Room

Esta nova versão contém um novo artefato para o Plug-in do Room para Gradle com o id androidx.room, que resolve vários problemas existentes no Room relacionados a entradas e saídas de esquemas usando as opções do processador de anotações do Gradle. O plug-in do Gradle do Room configura o projeto para que os esquemas gerados que são consumidos para migrações automáticas e são a saída das tarefas de compilação sejam configurados corretamente para ter builds reproduzíveis e armazenáveis em cache. O plug-in oferece uma DSL para configurar o local do esquema base:

room {
    schemaDirectory("$projectDir/schemas/")
}

O plug-in vai configurar o compilador do Room e as várias tarefas de compilação e os back-ends (javac, KAPT, KSP) para gerar arquivos de esquema em pastas com sabores, ou seja, schemas/flavorOneDebug/com.package.MyDatabase/1.json. Como de costume, esses arquivos são verificados no repositório para serem usados na validação e migrações automáticas. Ao migrar para o uso do plug-in em vez das opções do processador de anotação, os arquivos de esquema existentes precisam ser copiados para os diretórios de versão gerados criados pelo plug-in. Essa é uma operação de migração única que precisa ser feita manualmente. A documentação do esquema em developers.android.com será atualizada no futuro, assim que o feedback for resolvido e o plug-in for estável.

Mudanças na API

  • RoomDatabase.QueryCallback foi definida como uma interface funcional para permitir usos de conversão de SAM. (Iab8ea, b/281008549).

Correções de bugs

  • Solução para o problema que ocorre ao instanciar o banco de dados no Robolectric após a migração de origens do Room de Java para Kotlin. (Ic053c, b/274924903).

Versão 2.6.0-alpha01

22 de março de 2023

Lançamento de androidx.room:room-*:2.6.0-alpha01. A versão 2.6.0-alpha01 contém estas confirmações.

Novos recursos

  • Compatibilidade com classes de valor no Room para KSP. Agora, o Room oferece suporte a classes de valor em entidades. (4194095).
  • A geração de código Kotlin(ou "Kotlin CodeGen") agora pode ser ativada no Room (4297ec0). Para ativar o CodeGen Kotlin no Room, adicione o nome da opção room.generateKotlin às opções do processador para KSP. Para mais detalhes sobre como transmitir opções de processador para a KSP, consulte a documentação da KSP.

Observação:ao usar o Kotlin CodeGen, é importante observar que há outras restrições. Propriedades abstratas como getters de DAO ou consultas de DAO no CodeGen do Kotlin não são permitidas. Em vez disso, elas precisam ser reescritas como funções para evitar a falsa noção de que o valor da propriedade é imutável e tem um resultado armazenado fixo. Outra restrição adicionada é que os tipos de retorno da coleção Nullable não são mais permitidos no Room para o CodeGen Kotlin.

Aviso:seus projetos podem ser mais rigorosos em termos de nulidade ao usar o Kotlin CodeGen. No CodeGen do Kotlin, a nulidade dos argumentos de tipo é importante. Em Java, isso é quase ignorado. Por exemplo, digamos que você tenha um tipo de retorno "Flow<foo\>" e a tabela esteja vazia. No CodeGen Java, isso não causa problemas, mas no CodeGen Kotlin, você vai receber um erro. Para evitar isso, use "Flow<foo?\>", supondo que um valor nulo seja emitido. </foo?\></foo\>

Mudanças na API

  • Proteção contra o uso sem sentido de coleções com valor nulo em tipos de retorno de método DAO. (I777dc, b/253271782, b/259426907).
  • Uma API foi adicionada para criar um fluxo que emite mudanças no rastreador de invalidação. A API é útil para criar streams que precisam reagir a mudanças no banco de dados. (I8c790, b/252899305).

Correções de bugs

  • Não é permitido usar propriedades abstratas como getters DAO ou consultas DAO no codegen do Kotlin. Em vez disso, elas precisam ser reescritas como funções para evitar a falsa noção de que o valor da propriedade é imutável e tem um resultado armazenado fixo. (If6a13, b/127483380, b/257967987).

Versão 2.5.2

Versão 2.5.2

21 de junho de 2023

Lançamento de androidx.room:room-*:2.5.2. A versão 2.5.2 contém estas confirmações.

Correções de bugs

  • Correção de um problema de incompatibilidade com o kotlinx-metadata-jvm. (386d5c).
  • Correção de um problema que fazia com que o Room gerasse um erro ao ser usado em um teste Robolectric (f79bea, b/274924903).

Versão 2.5.1

Versão 2.5.1

22 de março de 2023

Lançamento de androidx.room:room-*:2.5.1. A versão 2.5.1 contém estas confirmações.

Correções de bugs

  • Evite verificar o diretório pai do banco de dados em FrameworkSQLiteHelper se ele já estiver aberto. (5de86b8).
  • Use uma verificação isOpenInternal para verificar se o banco de dados já está aberto. (e91fb35).
  • Melhor gerenciamento do caso reentrante no acquireTransactionThread() do Room agora está disponível. (219f98b). Durante uma transação de suspensão, o Room usa uma linha de execução do executor de transações, inicia um loop de eventos nela e envia operações de suspensão do banco de dados para que todas sejam encapsuladas na corrotina de transação. Geralmente, a linha de execução da transação é diferente daquela que inicia a transação, mas, em alguns casos, elas são iguais. Para lidar com esses casos reentrantes, o withTransaction() foi reestruturado para não depender mais de um job de controle. Em vez disso, ele executa o bloco de transação suspenso no runBlocking na linha de execução da transação.

Versão 2.5.0

Versão 2.5.0

22 de fevereiro de 2023

Lançamento de androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 e androidx.room:room-paging-rxjava3:2.5.0. A versão 2.5.0 contém estas confirmações.

Versão 2.5.0

11 de janeiro de 2023

Lançamento de androidx.room:room-*:2.5.0. A versão 2.5.0 contém estas confirmações.

Mudanças importantes desde a versão 2.4.0

  • Todas as origens de room-runtime foram convertidas de Java em Kotlin Talvez você encontre problemas de incompatibilidade de origem se o código estiver em Kotlin devido à conversão da biblioteca para Kotlin. Por exemplo, uma mudança incompatível com a origem conhecida é que, no InvalidationTracker, você precisa declarar onInvalidate() no Observer para ter um parâmetro do tipo Set, e não MutableSet. Além disso, alguns métodos getter foram convertidos em propriedades que exigem a sintaxe de acesso a propriedades em arquivos Kotlin. Registre um bug caso encontre incompatibilidades significativas.
  • Foi adicionada uma nova anotação de atalho, @Upsert, que tenta inserir uma entidade quando não há conflito de exclusividade ou atualizar a entidade se houver um conflito (I7aaab, b/241964353).
  • Foram adicionados novos artefatos para suporte à Paging do Room room-paging-rxjava2, room-paging-rxjava3 e room-paging-guava.
  • Foram adicionadas APIs para fornecer nomes de tabelas de chave e valor para desambiguação em @MapInfo (Icc4b5).

Versão 2.5.0-rc01

7 de dezembro de 2022

Lançamento de androidx.room:room-*:2.5.0-rc01. A versão 2.5.0-rc01 contém estas confirmações.

  • Essa versão é idêntica à 2.5.0-beta02.

Versão 2.5.0-beta02

9 de novembro de 2022

Lançamento de androidx.room:room-*:2.5.0-beta02. A versão 2.5.0-beta02 contém estas confirmações.

Mudanças na API

  • Foram corrigidas várias APIs que usam argumentos de consulta de invariante (Array<Any?>) a contravariante (Array<out Any?>) para corresponder ao comportamento da matriz do Java (b/253531073).

Versão 2.5.0-beta01

5 de outubro de 2022

Lançamento de androidx.room:room-*:2.5.0-beta01. A versão 2.5.0-beta01 contém estas confirmações.

Mudanças na API

  • A versão mínima da API com suporte para @Upsert passa a ser a 16. Isso acontece porque não é possível identificar um conflito de restrição de chave primária em APIs mais antigas (I5f67f, b/243039555).

Correções de bugs

  • Foi corrigido um problema de exportação incorreta de tabelas de sombra para os arquivos .json do esquema, o que causava corrupção de arquivos (I4f83b, b/246751839).

Versão 2.5.0-alpha03

24 de agosto de 2022

Lançamento de androidx.room:room-*:2.5.0-alpha03. A versão 2.5.0-alpha03 contém estas confirmações.

Novos recursos

  • Foi adicionada uma nova anotação de atalho, @Upsert, que tenta inserir uma entidade quando não há conflito de exclusividade ou atualizar a entidade se houver um conflito (I7aaab, b/241964353).

Correções de bugs

  • O Room agora vai gerar uma SQLiteConstraintException em vez de uma IllegalStateException durante uma verificação de restrição de chave externa de migração automática (I328dd).
  • Uma mudança incompatível com a origem do Kotlin para os getters e propriedades de getOpenHelper, getQueryExecutor e getTransactionExecutor foi corrigida (Iad0ac).

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

Mudanças na API

Correções de bugs

  • O algoritmo heurístico de resolução de colunas foi 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

  • Foi corrigido 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 programado 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 em room-runtime (I82fc8, b/206859668).
  • Uma API para bloqueio e uso de vários processos no nível do FrameworkSQLite* foi adicionada 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 disso, 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.3

Versão 2.4.3

27 de julho de 2022

Lançamento de androidx.room:room-*:2.4.3. A versão 2.4.3 contém estas confirmações.

Correções de bugs

  • Foi corrigido um problema que fazia com que o Room não reconhecesse funções de suspensão no Kotlin 1.7 (b/236612358).

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

  • Foi corrigido 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).
  • Foi resolvido um bug em que o Room gerava 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 disso, 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 uma AutoMigrationSpec vai ser fornecida durante a execução pelo método RoomDatabase.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 a runMigrationsAndValidate.
  • Suporte ao Room-Paging: lançamento de androidx.room:room-paging, que oferece suporte à Paging 3.0 nativa para consultas do Room que retornam androidx.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ão Map, SparseArray, LongSparseArray, além de ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap 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 a 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 desativá-lo 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 uni-los 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).
  • Foi corrigido 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).
  • Foi resolvido um 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).
  • Foi resolvido 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

  • Foi corrigido 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 por RoomDatabase.Builder, em vez de Dispatchers.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

Mudanças na API

  • Foi adicionada uma nova propriedade à anotação TypeConverters para permitir que os desenvolvedores desativem os conversores de tipos enumerados 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).

  • Suporte a 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

  • Foi corrigido 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 tem suporte aos métodos @Dao com tipos de retorno de multimapa, que são úteis para instruções JOIN. Os tipos de multimapas compatíveis são Map, além de ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap 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 com suporte, como LiveData, Observable do Rx ou corrotinas Flow.

Room-Paging

  • Lançamento de androidx.room:room-paging, que oferece suporte à Paging 3.0 nativa para consultas do Room que retornam androidx.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 pela Key, sendo que a Key será o primeiro item carregado. Esse comportamento é diferente do já existente, em que a LoadParams.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, apresentado 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 a runMigrationsAndValidate.

Correções de bugs

  • Foi corrigido um problema com a biblioteca nativa SQLite do Room para oferecer suporte a chips M1 da Apple (b/174695268).

  • Foi corrigido um problema em que o Room não gerava um erro 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 a í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 uma AutoMigrationSpec será fornecida no tempo de execução pela RoomDatabase.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

  • Foi corrigido um problema com migrações automáticas em que as @DatabaseViews não eram recriadas corretamente.

Contribuição externa

  • Foi corrigido um problema no JournalMode.TRUNCATE do Room em que o callback do InvalidationTracker às vezes era invocado de forma inválida, tarde demais ou não era invocado. Agradecemos a Uli Bubenheimer | [email protected] (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

  • Foi corrigido 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 tipos enumerados: o Room agora vai usar como padrão um conversor de tipo enumerado para string e vice-versa, caso nenhum tenha sido fornecido. Se já houver um conversor de tipo para um tipo enumerado, o Room vai priorizar o uso dele, em vez do 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 para que o app possa controlar a inicialização delas. Para marcar um conversor de tipo que vai ser fornecido ao Room, use a nova anotação @ProvidedTypeConverter.
  • Suporte ao RxJava3: o Room agora oferece suporte a 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

  • Foi corrigido um problema que impedia que as consultas do fluxo de corrotinas criadas pelo Room fossem consumidas em um bloco de suspensão withTransaction (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

Correções de bugs

  • Foi corrigido um bug em que a criação de PagingSource na linha de execução principal podia 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 | [email protected]" (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 suporte experimental à 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 build.

    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 por ksp. Por exemplo, em vez de kapt 'androidx.room:room-compiler:2.3.0-beta02' use ksp '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

  • Foi corrigido 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 usando RoomDatabase.Builder#setQueryCallback() (Iaa513, b/174478034, b/74877608).
  • O Room agora usa como padrão um tipo enumerado para string e o conversor de tipo de vice-versa, se nenhum for fornecido. Se já houver um conversor de tipo para um tipo enumerado, o Room vai priorizar o uso dele, em vez do padrão (b/73132006).

Problema conhecido

  • Se já existe um conversor de tipo unidirecional para leitura para o tipo enumerado, o Room pode usar acidentalmente o conversor integrado de string para tipo enumerado, o que talvez não seja adequado. Esse é um problema conhecido que pode ser corrigido com um conversor de duas vias. Consulte b/175707691.

Correções de bugs

  • Foi corrigido um problema em que o Room desativava incorretamente o processamento de anotações incrementais em versões mais recentes do JDK (b/171387388).
  • Foi corrigido um problema com o Room, que localizava a classe gerada quando diversos carregadores de classe eram usados. Agradecemos a "Serendipity | [email protected]" pela correção (b/170141113).
  • Foi corrigido um problema em que o Room gerava código incorreto quando um @Dao do Kotlin tinha uma classe de base com genéricos primitivos na JVM (b/160258066).

Contribuição externa

  • O Room usará beginTransactionNonExclusive por padrão se o modo WAL estiver ativado e a API for da versão 16 ou mais recente. Agradecemos a "Ahmed I. Khalil | [email protected]" (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 [email protected]" (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 [email protected]" (3e6792, b/146911060).

Mudanças na API

  • Um destino ausente foi adicionado à anotação @ForeignKey para evitar o uso fora da anotação @Entity (Iced1e).

  • O campo mCallbacks em RoomDatabase.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).

  • Foi corrigido um problema em que o Room validava 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 do RoomDatabase por Collections.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 oferece suporte a 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 com androidx.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

  • @RewriteQueriesToDropUnusedColumns é 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 foi descontinuada. Use @RewriteQueriesToDropUnusedColumns para substituir consultas de otimização do Room com projeções em estrela. Observe que @RewriteQueriesToDropUnusedColumns não substitui a solução de conflito de colunas room.expandProjection oferecida em relação aos tipos de retorno que continham campos @Embedded.

Correções de bugs

  • Foi corrigido um bug em que o Room não detectava corretamente a versão do JDK usada para ativar o processador de anotações incremental. Agradecimentos ao Blaz Solar ([email protected]) (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

  • Foi corrigido 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.

Correções de bugs

  • MultiInstanceInvalidationService agora é directBootAware. Graças a "Mygod [email protected]" (b/148240967).
  • Foi corrigido 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).
  • Foi corrigido 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 (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.

Correções de bugs

  • Foi corrigido 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).
  • Foi corrigido um problema em que o @Generated era usado incorretamente ao fazer um build com o JDK 9 (b/146538330).
  • Foi corrigido um problema em que o Room gerava código incorreto quando uma interface DAO no Kotlin tinha uma função concreta (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 estas confirmações.

Correções de bugs

  • Foi corrigido 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 (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 estas confirmações.

Correções de bugs

  • Foi corrigido 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 (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

  • Foi corrigido um bug em que o Room alertava incorretamente sobre CURSOR_MISMATCH com a opção de compilador expandProjection ativada (b/140759491)
  • Um mecanismo de repetição foi adicionado para lidar com a biblioteca nativa ausente usada para verificar consultas durante a 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 estas confirmações.

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 um RoomDatabase usando 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, enquanto createFromFile() é 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 tenta copiar novamente o banco de dados pré-preenchido, se disponível. Caso contrário, ele substitui e recria 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 são validados durante as migrações, se especificados (b/64088772).
  • Relações muitos para muitos: @Relation agora tem uma nova propriedade associateBy, 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 tipo List ou Set 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 propriedade targetEntity, 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 retorno Flow<T>. O fluxo retornado reemite um novo conjunto de valores se as tabelas de observação na consulta são invalidadas. A declaração de uma função DAO com um tipo de retorno Channel<T> é um erro. O Room recomenda o uso de Flow seguido das funções vizinhas para converter o Flow para Channel (b/130428884).
  • Processador de anotações incremental do Gradle: o Room agora é um processador de anotações de isolamento do 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).
  • Projeções de expansão: foi adicionada uma nova opção de compilador experimental room.expandProjection, que faz com que o Room reprograme 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 chamado SongIdAndTitle com apenas dois campos. Em seguida, o Room vai reprogramar a consulta para SELECT 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 aviso CURSOR_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 neste link.

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

  • Foi corrigido um bug em que uma consulta do fluxo de corrotinas parava de reemitir novos valores depois de um certo tempo (b/139175786).
  • Foi corrigido 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 tivesse passado por uma migração desde o Room 1.0, causando uma falha 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 neste link.

Novos recursos

  • Fluxo de corrotinas: os métodos DAO @Query agora podem ser do tipo de retorno Flow<T>. O fluxo retornado reemite um novo conjunto de valores se as tabelas de observação na consulta são invalidadas. A declaração de uma função DAO com um tipo de retorno Channel<T> é um erro. O Room recomenda o uso de Flow seguido das funções vizinhas para converter o Flow para Channel (b/130428884).
  • Projeções de expansão: foi adicionada uma nova opção de compilador experimental room.expandProjection, que faz com que o Room reprograme 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 chamado SongIdAndTitle com apenas dois campos. Em seguida, o Room vai reprogramar a consulta para SELECT 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 aviso CURSOR_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 a RoomDatabase.Callback para quando o Room migra destrutivamente um banco de dados (b/79962330).

Correções de bugs

  • Foi corrigido 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).
  • Foi corrigido 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/137454915).
  • Foi corrigido 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 (b/137878827).
  • O código gerado para @Relation quando a chave relacionada é do tipo BLOB foi atualizado para usar um ByteBuffer comparável (b/137881998).
  • Foi corrigido 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 (b/138664463).
  • Foi corrigido um bug em que o Room informava a ausência de getters e setters para uma coluna ignorada usando @Entity quando a classe de entidade era usada em determinados métodos DAO (b/138238182).
  • Foi corrigido 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 (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 um RoomDatabase usando 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, enquanto createFromFile() é 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 tenta copiar novamente o banco de dados pré-preenchido, se disponível. Caso contrário, ele substitui e recria 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 são 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 via ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, e você decidir definir valores padrão usando @ColumnInfo nas mesmas colunas, talvez seja necessário fornecer uma migração para validar os valores não contabilizados. Consulte Migrações do Room para ver mais informações.

  • Relações muitos para muitos: @Relation agora tem uma nova propriedade associateBy, 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 tipo List ou Set 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 propriedade targetEntity, 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 do 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).

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).
  • Foi corrigido 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 (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 (em inglês). 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 (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ão RoomDatabase.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 contendo INSERT, DELETE ou UPDATE, agora têm suporte a tipos de retorno Rx Completable, Single, Maybe e o tipo de retorno de Guava ListenableFuture, e também podem ser funções de suspensão.
  • enableMultiInstanceInvalidation: é uma nova API em RoomDatabase.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 em RoomDatabase.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 usa 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

  • Foi corrigido um erro de inicialização do Room que ocorria devido a uma configuração de temp_store já definida (b/132602198).
  • Foi corrigido um aviso do uso de aspas duplas para usuários com o SQLite 3.27.0 e versões mais recentes (b/131712640).
  • Foi corrigido um bug em que o InvalidationTracker causava uma falha quando várias verificações de invalidação ocorriam em paralelo (b/133457594).

Versão 2.1.0-beta01

7 de maio de 2019

Lançamento do androidx.room 2.1.0-beta01 sem mudanças 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 um CoroutineScope como receptor. Isso evita que o wrapper coroutineScope { } extra necessário para determinadas execuções simultâneas no bloco de transações seja ignorado.

Correções de bugs

  • Foi corrigido 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 (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 utiliza 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 inclui mais as exceções verificadas em RuntimeExceptions (b/128623748).

Correções de bugs

  • Foi corrigido um bug em que o rastreador de invalidação parava de observar uma tabela de conteúdo quando observadores da tabela de conteúdo e de uma tabela FTS de conteúdo externo eram adicionados (b/128508917).
  • A gramática SQLite do Room foi atualizada 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 artefato room-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

  • As room-coroutines de artefato foram renomeadas como room-ktx, seguindo a mesma nomeação de outros artefatos do AndroidX.
  • beginTransaction, setTransactionSuccessful e endTransaction em RoomDatabase foram descontinuados e substituídos por runInTransaction e a função de extensão room-ktx withTransaction.

Correções de bugs

  • Foi corrigido um bug em que os argumentos do tokenizer eram descartados se o tokenizer usado fosse SIMPLE (b/125427014).
  • Foi corrigido um bug em que o Room não identificava corretamente as funções de suspensão com parâmetros em que o tipo era uma classe interna (b/123767877).
  • Foi corrigido um bug em que o método DAO @Query adiado com instruções INSERT, UPDATE ou DELETE preparava a consulta na linha de execução principal (b/123695593).
  • Correção de vários bugs em que a Room gerava código incorreto para determinadas funções de suspensão. b/123466702 e b/123457323
  • Foi corrigido um bug em que o uso descontinuado de métodos não era suprimido corretamente no código gerado (b/117602586).
  • A dependência do Room do androidx.sqlite foi atualizada 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). Essa dependência pode ser resolvida com a adição de maven { 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ções INSERT, UPDATE ou DELETE agora podem retornar tipos assíncronos Single, Mayble, Completable e ListenableFuture. 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 como Single, Mayble, Completable, LiveData ou ListenableFuture. 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 e OnConflictStrategy.ROLLBACK foram @Deprecated (descontinuados), já que não se comportam como esperado com as vinculações SQLite atuais do Android (b/117266738).

Correções de bugs

  • Foi corrigido 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).
  • Foi corrigido 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 (b/122902595).
  • Foi corrigido 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).
  • Foi corrigido um problema em que o banco de dados gerava um impasse ao invocar funções de suspensão DAO entre uma beginTransaction() e uma endTransaction() (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 em FtsOptions 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 oferecem suporte a ListenableFuture como tipo de retorno (b/119418331).

Correções de bugs

  • Foi corrigido um bug em que o Room tentava incorretamente encontrar um construtor com colunas na propriedade ignoredColumns de @Entity (b/119830714).
  • Foi corrigido um bug em que o Room não marcava os parâmetros do método DAO como finais na implementação gerada (b/118015483).
  • Foi corrigido um bug em que o processador do Room falhava ao relatar um erro em uma consulta com símbolos especiais (b/119520136).
  • Foi corrigido um bug em que o Room recusava diversas outras implementações Collection como argumentos de uma expressão IN (b/119884035).
  • Foi corrigido 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).
  • O bloqueio de fechamento do RoomDatabase foi atualizado 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 referenciar @DatabaseView em um @Relation (b/117680932).

Correções de bugs

  • Foi corrigido um bug em que o Room executava E/S de disco na linha de execução principal ao assinar e descartar um tipo de retorno Rx (b/117201279).
  • Foi corrigido um bug em que o Room não conseguia encontrar um conversor de tipo adequado para um campo em uma classe de entidade Kotlin (b/111404868).
  • Foi corrigido um bug em que o Room gerava código incorreto para uma implementação da interface DAO com um método padrão Kotlin que não tinha argumentos (b/117527454).
  • O analisador de gramática SQLite do Room foi atualizado para corrigir um problema de performance que prolongava os tempos de build (b/117401230).

Versão 2.1.0-alpha01

8 de outubro de 2018

Novos recursos

  • FTS: o Room agora oferece suporte a entidades com uma tabela de mapeamento FTS3 ou FTS4 (em inglês). 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 (em inglês), usando a anotação @DatabaseView (b/67033276).
  • Valor automático: o Room agora oferece suporte à declaração de classes com a anotação AutoValue (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 as 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 Rx Completable, Single<T> e Maybe<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: nova API em RoomDatabase.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: nova API em RoomDatabase.Builder para recriar automaticamente o banco de dados em caso de downgrade (b/110416954).
  • ignoredColumns: 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 e mDatabase em RoomDatabase foram @Deprecated (descontinuados) e vão ser removidos na próxima versão principal do Room (b/76109329).

Correções de bugs

  • Foram corrigidos 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 (b/111504749, b/111519144).
  • O Room agora usa 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

  • A classe/nome do campo no erro "não é possível encontrar o getter para o campo" foi especficada (b/73334503).
  • Foi corrigida a compatibilidade do 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ê está usando migrações.

Foi corrigido 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

  • Foi corrigido um erro de compilação que ocorria quando um POJO do Kotlin referenciava uma entidade relacional definida no Java (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 e Maybe Rx do Room, em que a consulta era reciclada antecipadamente, causando problemas quando você adicionava mais de um observador às instâncias Single ou Maybe retornadas (b/76031240).

  • [RoomDatabase.clearAllTables][ref-clearAllTables] não executa VACUUM no banco de dados se é 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 uma String 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 suporte a argumentos).
  • O método [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] do RoomDatabase.Builder agora aceita vararg int em vez de vararg 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 propriedade observedEntities, desde que ele referencie uma ou mais entidades nos campos Embedded ou Relations (b/74041772).
  • Paging: a implementação de DataSource do Room agora processa corretamente 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 em RoomDatabase.Builder proporciona um controle mais refinado, permitindo as migrações destrutivas de versões iniciais do esquema, em relação a fallbackToDestructiveMigration (b/64989640).
  • O Room agora tem suporte apenas às APIs Paging mais atualizadas (alpha-4 e mais recentes). O suporte ao LivePagedListProvider foi descontinuado. Para usar a nova Room Alfa, é necessário usar a Paging alpha-4 ou mais recente e mudar do LivePagedListProvider para o LivePagedListBuilder, 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).