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/。
如果您想测试最近的错误修复或尚未打包在正式版本中的功能,您可以通过 Gradle 使用 Realm 当前开发版本的-SNAPSHOT版本,该版本可在 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。
从 Oracle 下载JDK 8并安装。
Android Studio 最新稳定版本。目前为 4.1.1。
下载并安装 Android SDK Build-Tools 29.0.3 、 Android Pie (API 29) (例如通过 Android Studio 的Android SDK Manager )。
安装 CMake 版本 3.18.4 并构建 Ninja。
从 Android Studio 中的 SDK 管理器安装 NDK(并排) 21.0.6113669 。请记住选中☑ Show package details
以显示所有可用版本。
将 Android home 环境变量添加到您的配置文件中:
export ANDROID_HOME=~/Library/Android/sdk
如果您从 macOS Finder 启动 Android Studio,还应该运行以下命令:
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
(如果登录 shell 是zsh
则添加到~/.zprofile
)
如果您使用 Android Studio 开发 Realm Java,我们建议您通过在 Android Studio 上执行以下步骤从索引目标中排除某些目录。它确实加快了构建后的索引阶段。
/realm/realm-library/
下,在Project
视图中选择build
、 .cxx
和distribution
文件夹。Command + Shift + A
打开Find action
对话框。如果您不使用默认键盘映射,也不使用 macOS,则可以通过搜索Find action
在Keymap
首选项中找到您的快捷键。Excluded
(不是Exclude
)操作并选择它。选定的文件夹图标应变为橙色(在默认主题中)。您可以使用git下载Realm Java的源代码。由于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 Core 的子模块版本构建 Realm Java。这是通过在构建时提供以下参数来完成的: -PbuildCore=true
。
./gradlew assembleBase -PbuildCore=true
您可以使用以下参数关闭过程间优化: -PenableLTO=false
。
./gradlew assembleBase -PenableLTO=false`
注意:构建Base
变体将始终构建领域核心。
注意:默认情况下启用过程间优化。
注意:如果您想在 Android Studio 内从源代码构建,则需要通过进入 Realm 项目设置Settings > Build, Execution, Deployment > Compiler > Command-line options
并添加-PbuildCore=true
或-PenableLTO=false
来更新 Gradle 参数-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)
将仅为与所连接设备对应的 ABI 构建 JNI 文件。这些测试需要一个正在运行的对象服务器(见下文)使用上述命令生成 Javadoc 可能会生成警告。尽管有警告,还是生成了 Javadoc。
此存储库中的所有 gradle 项目都有wrapper
任务来生成 Gradle 包装器。这些任务引用/dependencies.list
中定义的gradle
属性来确定生成包装器的 Gradle 版本。我们有一个脚本./tools/update_gradle_wrapper.sh
来自动执行这些步骤。当您更新 Gradle Wrappers 时,请遵循以下步骤。
/dependencies.list
中定义的gradle
属性编辑为新的 Gradle Wrapper 版本。/tools/update_gradle_wrapper.sh
。该存储库分为六个 Gradle 项目:
realm
:它包含实际的库(包括 JNI 层)和注释处理器。realm-annotations
:它包含 Realm 定义的注释。realm-transformer
:它包含字节码转换器。gradle-plugin
:它包含 Gradle 插件。examples
:它包含示例项目。该项目直接依赖于gradle-plugin
,它添加了对realm
生成的工件的依赖关系。这意味着如果assembleExamples
尚未先执行,则./gradlew clean
和./gradlew cleanExamples
将失败。请注意,IntelliJ 不支持同一窗口中的多个项目,因此六个 Gradle 项目中的每一个都必须作为单独的 IntelliJ 项目导入。
由于存储库包含几个完全独立的 Gradle 项目,因此需要运行多个独立的构建来组装它。在构建日志中看到类似以下的行: :realm:realm-library:compileBaseDebugAndroidTestSources UP-TO-DATE
并不意味着您可以运行./gradlew :realm:realm-library:compileBaseDebugAndroidTestSources
。
./examples
文件夹包含许多示例项目,展示了如何使用 Realm。如果这是您第一次签出或拉取此存储库的新版本来尝试示例,则必须首先从顶级目录调用./gradlew installRealmJava
。否则,这些示例将无法编译,因为它们依赖于mavenLocal()
中安装的所有 Realm 工件。
独立的示例可以从网站下载。
要运行这些测试,您必须有一个设备连接到构建计算机,并且adb
命令必须位于您的PATH
中
连接 Android 设备并验证命令adb devices
显示已连接的设备:
adb devices
List of devices attached
004c03eb5615429f device
运行仪器测试:
cd realm
./gradlew connectedBaseDebugAndroidTest
这些测试可能需要长达半小时才能完成。
realm/realm-library/src/syncIntegrationTest
中的测试需要正在运行的测试服务器才能工作。可以从tools/sync_test_server/Dockerfile
构建 docker 映像来运行测试服务器。 tools/sync_test_server/start_server.sh
将自动构建 docker 镜像。
要在本地运行测试服务器:
安装 docker 并运行它。
运行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 > Preferences... > Code Style > Manage... > Import 或 Android Studio > Preferences... > Inspections > Manage... > Import 从 Android Studio 导入它们。导入后,在“管理...”按钮左侧的下拉列表中选择样式/lint。
Realm Java 在 Apache 2.0 许可证下发布。
Realm Core 也是根据 Apache 2.0 许可证发布的,可在此处获取。
如果您使用 Realm 并对它感到满意,我们只要求您考虑发送一条提及 @realm 的推文来分享您的想法!
如果您不喜欢它,请告诉我们您希望改进什么,以便我们修复它!