Realm é um banco de dados móvel executado diretamente em telefones, tablets ou wearables. Este repositório contém o código-fonte da versão Java do Realm, que atualmente roda apenas em Android.
O Realm Kotlin SDK agora é GA e pode ser usado para Android e Kotlin Multiplatform. Enquanto ainda estamos adicionando recursos, considere usar o Realm Kotlin para qualquer novo projeto e informe-nos se você perder alguma coisa lá!
Consulte as instruções detalhadas em nossos documentos para adicionar Realm ao seu projeto.
A documentação do Realm pode ser encontrada em mongodb.com/docs/atlas/device-sdks/sdk/java/. A referência da API está localizada em mongodb.com/docs/atlas/device-sdks/sdk/java/api/.
Se você quiser testar correções de bugs recentes ou recursos que ainda não foram empacotados em uma versão oficial, você pode usar uma versão -SNAPSHOT da versão de desenvolvimento atual do Realm via Gradle, disponível no Sonatype OSS
buildscript {
repositories {
mavenCentral()
google()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:<version>-SNAPSHOT"
}
}
allprojects {
repositories {
mavenCentral()
google()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
jcenter()
}
}
Consulte version.txt para obter o número da versão mais recente.
Caso não queira usar a versão pré-compilada, você mesmo pode construir o Realm a partir do código-fonte.
Baixe o JDK 8 da Oracle e instale-o.
A versão estável mais recente do Android Studio. Atualmente 4.1.1.
Baixe e instale o Android SDK Build-Tools 29.0.3 , Android Pie (API 29) (por exemplo, por meio do Android SDK Manager do Android Studio).
Instale o CMake versão 3.18.4 e construa o Ninja.
Instale o NDK (lado a lado) 21.0.6113669 do SDK Manager no Android Studio. Lembre-se de marcar ☑ Show package details
no gerenciador para exibir todas as versões disponíveis.
Adicione a variável de ambiente inicial do Android ao seu perfil:
export ANDROID_HOME=~/Library/Android/sdk
Se você estiver iniciando o Android Studio a partir do macOS Finder, também deverá executar o seguinte comando:
launchctl setenv ANDROID_HOME "$ANDROID_HOME"
Se desejar especificar o local no qual armazenar os arquivos do Realm Core, defina a variável de ambiente REALM_CORE_DOWNLOAD_DIR
. Ele permite armazenar em cache os principais artefatos de lançamento.
export REALM_CORE_DOWNLOAD_DIR=~/.realmCore
Os usuários do macOS também devem executar o seguinte comando para Android Studio para ver esta variável de ambiente.
launchctl setenv REALM_CORE_DOWNLOAD_DIR "$REALM_CORE_DOWNLOAD_DIR"
Seria uma boa ideia adicionar todas as definições de símbolos (e os comandos launchctl
que os acompanham, se você estiver usando macOS) ao seu ~/.profile
(ou ~/.zprofile
se o shell de login for zsh
)
Se você desenvolver Realm Java com Android Studio, recomendamos excluir alguns diretórios do destino de indexação executando as etapas a seguir no Android Studio. Isso realmente acelera a fase de indexação após a construção.
/realm/realm-library/
, selecione build
, .cxx
e pastas distribution
na visualização Project
.Command + Shift + A
para abrir a caixa de diálogo Find action
. Se você não estiver usando o mapa de teclado padrão nem o macOS, poderá encontrar sua tecla de atalho na preferência Keymap
pesquisando Find action
.Excluded
(não Exclude
) e selecione-a. Os ícones das pastas selecionadas devem ficar laranja (no tema padrão). Você pode baixar o código-fonte do Realm Java usando git. Como realm-java possui submódulos git, use --recursive
ao clonar o repositório.
git clone [email protected]:realm/realm-java.git --recursive
ou
git clone https://github.com/realm/realm-java.git --recursive
Depois de concluir todos os pré-requisitos, a construção do Realm é feita com um comando simples.
./gradlew assemble
Esse comando irá gerar:
A compilação completa pode levar uma hora ou mais para ser concluída.
É possível construir o Realm Java com a versão do submódulo do Realm Core. Isso é feito fornecendo o seguinte parâmetro durante a construção: -PbuildCore=true
.
./gradlew assembleBase -PbuildCore=true
Você pode desativar otimizações interprocedimentos com o seguinte parâmetro: -PenableLTO=false
.
./gradlew assembleBase -PenableLTO=false`
Nota: Construir a variante Base
sempre construiria realm-core.
Nota: As otimizações interprocedimentos são habilitadas por padrão.
Nota: Se você deseja compilar a partir do código-fonte dentro do Android Studio, você precisa atualizar os parâmetros do Gradle acessando as configurações dos projetos do Realm Settings > Build, Execution, Deployment > Compiler > Command-line options
e adicionar -PbuildCore=true
ou -PenableLTO=false
para isso. Alternativamente, você pode adicioná-lo ao seu gradle.properties
:
buildCore=true
enableLTO=false
Nota: Se estiver construindo no OSX, você pode evitar que o Gatekeeper bloqueie todos os executáveis do NDK desativando-o: sudo spctl --master-disable
. Lembre-se de habilitá-lo depois: sudo spctl --master-enable
./gradlew tasks
mostrará todas as tarefas disponíveis./gradlew javadoc
irá gerar os Javadocs./gradlew monkeyExamples
executará os testes de macaco em todos os exemplos./gradlew installRealmJava
instalará a biblioteca Realm e o plugin para mavenLocal()./gradlew clean -PdontCleanJniFiles
removerá todos os arquivos gerados, exceto os arquivos relacionados ao JNI. Isso reduz muito o tempo de recompilação../gradlew connectedUnitTests -PbuildTargetABIs=$(adb shell getprop ro.product.cpu.abi)
criará arquivos JNI apenas para a ABI que corresponde ao dispositivo conectado. Esses testes requerem um Object Server em execução (veja abaixo)Gerar o Javadoc usando o comando acima pode gerar avisos. O Javadoc é gerado apesar dos avisos.
Todos os projetos Gradle neste repositório possuem tarefa wrapper
para gerar Gradle Wrappers. Essas tarefas referem-se à propriedade gradle
definida em /dependencies.list
para determinar a versão Gradle de geração de wrappers. Temos um script ./tools/update_gradle_wrapper.sh
para automatizar essas etapas. Ao atualizar o Gradle Wrappers, siga as etapas a seguir.
gradle
definida em /dependencies.list
para a nova versão do Gradle Wrapper./tools/update_gradle_wrapper.sh
.O repositório está organizado em seis projetos Gradle:
realm
: contém a biblioteca real (incluindo a camada JNI) e o processador de anotações.realm-annotations
: contém as anotações definidas pelo Realm.realm-transformer
: contém o transformador de bytecode.gradle-plugin
: contém o plugin Gradle.examples
: contém os projetos de exemplo. Este projeto depende diretamente do gradle-plugin
que adiciona uma dependência aos artefatos produzidos por realm
. Isso significa que ./gradlew clean
e ./gradlew cleanExamples
falharão se assembleExamples
não tiver sido executado primeiro. Observe que o IntelliJ não oferece suporte a vários projetos na mesma janela, portanto, cada um dos seis projetos Gradle deve ser importado como um projeto IntelliJ separado.
Como o repositório contém vários projetos Gradle completamente independentes, várias compilações independentes são executadas para montá-lo. Ver uma linha como: :realm:realm-library:compileBaseDebugAndroidTestSources UP-TO-DATE
no log de compilação não significa que você pode executar ./gradlew :realm:realm-library:compileBaseDebugAndroidTestSources
.
A pasta ./examples
contém muitos projetos de exemplo que mostram como o Realm pode ser usado. Se esta for a primeira vez que você faz check-out ou extrai uma nova versão deste repositório para testar os exemplos, você deve primeiro chamar ./gradlew installRealmJava
do diretório de nível superior. Caso contrário, os exemplos não serão compilados, pois dependem da instalação de todos os artefatos do Realm em mavenLocal()
.
Exemplos independentes podem ser baixados do site.
Para executar esses testes, você deve ter um dispositivo conectado ao computador de compilação e o comando adb
deve estar em seu PATH
Conecte um dispositivo Android e verifique se o comando adb devices
mostra um dispositivo conectado:
adb devices
List of devices attached
004c03eb5615429f device
Execute testes de instrumentação:
cd realm
./gradlew connectedBaseDebugAndroidTest
Esses testes podem levar até meia hora para serem concluídos.
Os testes em realm/realm-library/src/syncIntegrationTest
requerem um servidor de teste em execução para funcionar. Uma imagem docker pode ser construída em tools/sync_test_server/Dockerfile
para executar o servidor de teste. tools/sync_test_server/start_server.sh
criará a imagem do docker automaticamente.
Para executar um servidor de teste localmente:
Instale o docker e execute-o.
Execute tools/sync_test_server/start_server.sh
:
cd tools/sync_test_server
./start_server.sh
Este comando não será concluído até que o servidor seja interrompido.
Execute testes de instrumentação
Em uma nova janela de terminal, execute:
cd realm
./gradlew connectedObjectServerDebugAndroidTest
Observe que se estiver usando o VirtualBox (Genymotion), a rede precisa estar em ponte para que os testes funcionem. Isso é feito em VirtualBox > Network
. Defina "Adaptador 2" como "Adaptador em ponte".
Esses testes podem levar até meia hora para serem concluídos.
Consulte CONTRIBUTING.md para mais detalhes!
Este projeto segue o Código de Conduta do MongoDB. Ao participar, espera-se que você cumpra este código. Por favor, relate comportamento inaceitável para [email protected].
O diretório realm/config/studio
contém arquivos lint e de estilo recomendados para o código do projeto. Importe-os do Android Studio com Android Studio > Preferências... > Estilo de código > Gerenciar... > Importar, ou Android Studio > Preferências... > Inspeções > Gerenciar... > Importar. Depois de importado, selecione o estilo/lint no menu suspenso à esquerda do botão Gerenciar....
Realm Java é publicado sob a licença Apache 2.0.
Realm Core também é publicado sob a licença Apache 2.0 e está disponível aqui.
Se você usa o Realm e está satisfeito com ele, tudo o que pedimos é que você considere enviar um tweet mencionando @realm para compartilhar suas idéias!
E se você não gostar, diga-nos o que você gostaria de melhorar, para que possamos consertar!