Realm — это мобильная база данных, которая работает непосредственно на телефонах, планшетах или носимых устройствах. В этом репозитории хранится исходный код Java-версии Realm, которая в настоящее время работает только на Android.
Realm Kotlin SDK теперь общедоступен и может использоваться как для Android, так и для мультиплатформы Kotlin. Хотя мы все еще добавляем функции, рассмотрите возможность использования Realm Kotlin для любого нового проекта и дайте нам знать, если вы что-то пропустите!
Пожалуйста, ознакомьтесь с подробными инструкциями в нашей документации по добавлению Realm в ваш проект.
Документацию для Realm можно найти по адресу mongodb.com/docs/atlas/device-sdks/sdk/java/. Ссылка на API находится по адресу mongodb.com/docs/atlas/device-sdks/sdk/java/api/.
Если вы хотите протестировать недавние исправления ошибок или функции, которые еще не были включены в официальный выпуск, вы можете использовать выпуск -SNAPSHOT текущей разрабатываемой версии Realm через Gradle, доступный в 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()
}
}
Номер последней версии см. в файле version.txt.
Если вы не хотите использовать предварительно скомпилированную версию, вы можете собрать Realm самостоятельно из исходного кода.
Загрузите JDK 8 с сайта Oracle и установите его.
Последняя стабильная версия Android Studio. На данный момент 4.1.1.
Загрузите и установите Android SDK Build-Tools 29.0.3 , Android Pie (API 29) (например, через Android SDK Manager в Android Studio).
Установите CMake версии 3.18.4 и соберите Ninja.
Установите NDK (параллельно) 21.0.6113669 из диспетчера SDK в Android Studio. Не забудьте установить флажок ☑ Show package details
в диспетчере, чтобы отобразить все доступные версии.
Добавьте переменную домашней среды Android в свой профиль:
export ANDROID_HOME=~/Library/Android/sdk
Если вы запускаете Android Studio из MacOS Finder, вам также следует выполнить следующую команду:
launchctl setenv ANDROID_HOME "$ANDROID_HOME"
Если вы хотите указать место для хранения архивов Realm Core, определите переменную среды REALM_CORE_DOWNLOAD_DIR
. Это позволяет кэшировать артефакты выпуска ядра.
export REALM_CORE_DOWNLOAD_DIR=~/.realmCore
Пользователи macOS также должны выполнить следующую команду для Android Studio, чтобы увидеть эту переменную среды.
launchctl setenv REALM_CORE_DOWNLOAD_DIR "$REALM_CORE_DOWNLOAD_DIR"
Было бы неплохо добавить все определения символов (и сопровождающие их команды launchctl
, если вы используете macOS) в ваш ~/.profile
(или ~/.zprofile
если оболочка входа — zsh
).
Если вы разрабатываете Realm Java с помощью Android Studio, мы рекомендуем вам исключить некоторые каталоги из цели индексирования, выполнив следующие шаги в Android Studio. Это действительно ускоряет этап индексации после сборки.
/realm/realm-library/
выберите папки build
, .cxx
и distribution
в представлении Project
.Command + Shift + A
, чтобы открыть диалоговое окно Find action
. Если вы не используете раскладку клавиатуры по умолчанию и не используете macOS, вы можете найти сочетание клавиш в настройках Keymap
, выполнив поиск Find action
.Excluded
(не Exclude
») и выберите его. Значки выбранных папок должны стать оранжевыми (в теме по умолчанию). Вы можете скачать исходный код Realm Java с помощью git. Поскольку в Realm-Java есть подмодули git, используйте --recursive
при клонировании репозитория.
git clone [email protected]:realm/realm-java.git --recursive
или
git clone https://github.com/realm/realm-java.git --recursive
После того, как вы выполнили все необходимые условия, создание Realm можно выполнить с помощью простой команды.
./gradlew assemble
Эта команда сгенерирует:
Полная сборка может занять час или больше.
Realm Java можно собрать с помощью подмодуля Realm Core. Это делается путем предоставления при сборке следующего параметра: -PbuildCore=true
.
./gradlew assembleBase -PbuildCore=true
Вы можете отключить межпроцедурную оптимизацию с помощью следующего параметра: -PenableLTO=false
.
./gradlew assembleBase -PenableLTO=false`
Примечание. При создании Base
варианта всегда будет создаваться ядро области.
Примечание. Межпроцедурная оптимизация включена по умолчанию.
Примечание. Если вы хотите выполнить сборку из исходного кода внутри Android Studio, вам необходимо обновить параметры Gradle, перейдя в настройки проектов Realm Settings > Build, Execution, Deployment > Compiler > Command-line options
и добавив -PbuildCore=true
или -PenableLTO=false
. Альтернативно вы можете добавить его в свой gradle.properties
:
buildCore=true
enableLTO=false
Примечание. При сборке на OSX вы можете запретить Gatekeeper блокировать все исполняемые файлы NDK, отключив его: sudo spctl --master-disable
. Не забудьте потом включить его: sudo spctl --master-enable
./gradlew tasks
покажет все доступные задачи../gradlew javadoc
сгенерирует Javadocs./gradlew monkeyExamples
запустит обезьяньи тесты для всех примеров../gradlew installRealmJava
установит библиотеку Realm и плагин для mavenLocal()../gradlew clean -PdontCleanJniFiles
удалит все сгенерированные файлы, за исключением файлов, связанных с JNI. Это значительно сокращает время перекомпиляции../gradlew connectedUnitTests -PbuildTargetABIs=$(adb shell getprop ro.product.cpu.abi)
создаст файлы JNI только для ABI, соответствующего подключенному устройству. Для этих тестов требуется работающий объектный сервер (см. ниже).Создание Javadoc с помощью приведенной выше команды может привести к появлению предупреждений. Javadoc создается несмотря на предупреждения.
Все проекты Gradle в этом репозитории имеют задачу- wrapper
для создания оболочек Gradle. Эти задачи относятся к свойству gradle
, определенному в /dependencies.list
чтобы определить версию Gradle для создания оболочек. У нас есть скрипт ./tools/update_gradle_wrapper.sh
для автоматизации этих шагов. При обновлении Gradle Wrappers выполните следующие действия.
gradle
, определенное в /dependencies.list
до новой версии Gradle Wrapper./tools/update_gradle_wrapper.sh
.Репозиторий разделен на шесть проектов Gradle:
realm
: она содержит реальную библиотеку (включая уровень JNI) и процессор аннотаций.realm-annotations
: содержит аннотации, определенные Realm.realm-transformer
: содержит преобразователь байт-кода.gradle-plugin
: содержит плагин Gradle.examples
: содержит примеры проектов. Этот проект напрямую зависит от gradle-plugin
, который добавляет зависимость к артефактам, создаваемым realm
. Это означает, что ./gradlew clean
и ./gradlew cleanExamples
завершатся ошибкой, если сначала не была выполнена assembleExamples
. Обратите внимание, что IntelliJ не поддерживает несколько проектов в одном окне, поэтому каждый из шести проектов Gradle необходимо импортировать как отдельный проект IntelliJ.
Поскольку репозиторий содержит несколько полностью независимых проектов Gradle, для его сборки запускается несколько независимых сборок. Наличие такой строки: :realm:realm-library:compileBaseDebugAndroidTestSources UP-TO-DATE
в журнале сборки не означает, что вы можете запустить ./gradlew :realm:realm-library:compileBaseDebugAndroidTestSources
.
Папка ./examples
содержит множество примеров проектов, показывающих, как можно использовать Realm. Если вы впервые извлекаете или извлекаете новую версию этого репозитория, чтобы опробовать примеры, вам необходимо сначала вызвать ./gradlew installRealmJava
из каталога верхнего уровня. В противном случае примеры не будут скомпилированы, поскольку они зависят от того, все артефакты Realm установлены в mavenLocal()
.
Отдельные примеры можно скачать с сайта.
Для запуска этих тестов у вас должно быть устройство, подключенное к компьютеру сборки, а команда adb
должна находиться в вашем PATH
Подключите устройство Android и убедитесь, что команда adb devices
показывает подключенное устройство:
adb devices
List of devices attached
004c03eb5615429f device
Запустите инструментальные тесты:
cd realm
./gradlew connectedBaseDebugAndroidTest
Проведение этих тестов может занять до получаса.
Для работы тестов в realm/realm-library/src/syncIntegrationTest
требуется работающий сервер тестирования. Образ Docker можно создать из tools/sync_test_server/Dockerfile
для запуска тестового сервера. tools/sync_test_server/start_server.sh
автоматически создаст образ докера.
Чтобы запустить тестовый сервер локально:
Установите докер и запустите его.
Запустите tools/sync_test_server/start_server.sh
:
cd tools/sync_test_server
./start_server.sh
Эта команда не завершится до тех пор, пока сервер не будет остановлен.
Запустите инструментальные тесты
В новом окне терминала запустите:
cd realm
./gradlew connectedObjectServerDebugAndroidTest
Обратите внимание: при использовании VirtualBox (Genymotion) для работы тестов сеть должна быть соединена мостом. Это делается в VirtualBox > Network
. Установите для параметра «Адаптер 2» значение «Мостовой адаптер».
Проведение этих тестов может занять до получаса.
Подробности смотрите на CONTRIBUTING.md!
Этот проект соответствует Кодексу поведения MongoDB. Ожидается, что, участвуя, вы будете соблюдать этот кодекс. Пожалуйста, сообщите о неприемлемом поведении по адресу [email protected].
Каталог realm/config/studio
содержит файлы lint и стилей, рекомендуемые для кода проекта. Импортируйте их из Android Studio с помощью Android Studio > Настройки... > Стиль кода > Управление... > Импорт или Android Studio > Настройки... > Проверки > Управление... > Импорт. После импорта выберите стиль/линт в раскрывающемся списке слева от кнопки «Управление...».
Realm Java публикуется под лицензией Apache 2.0.
Realm Core также публикуется под лицензией Apache 2.0 и доступен здесь.
Если вы используете Realm и довольны им, все, что мы просим, — это отправить твит с упоминанием @realm, чтобы поделиться своими мыслями!
А если вам это не нравится, сообщите нам, что вы хотели бы улучшить, чтобы мы могли это исправить!