Realm adalah database seluler yang berjalan langsung di dalam ponsel, tablet, atau perangkat yang dapat dikenakan. Repositori ini menyimpan kode sumber untuk Realm versi Java, yang saat ini hanya berjalan di Android.
Realm Kotlin SDK kini menjadi GA dan dapat digunakan untuk Multiplatform Android dan Kotlin. Meskipun kami masih menambahkan fitur, harap pertimbangkan untuk menggunakan Realm Kotlin untuk proyek baru apa pun, dan beri tahu kami jika Anda melewatkan sesuatu di sana!
Silakan lihat petunjuk rinci di dokumen kami untuk menambahkan Realm ke proyek Anda.
Dokumentasi untuk Realm dapat ditemukan di mongodb.com/docs/atlas/device-sdks/sdk/java/. Referensi API terletak di mongodb.com/docs/atlas/device-sdks/sdk/java/api/.
Jika Anda ingin menguji perbaikan bug terbaru atau fitur yang belum dikemas dalam rilis resmi, Anda dapat menggunakan rilis -SNAPSHOT dari versi pengembangan Realm saat ini melalui Gradle, tersedia di 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()
}
}
Lihat version.txt untuk nomor versi terbaru.
Jika Anda tidak ingin menggunakan versi yang telah dikompilasi, Anda dapat membangun Realm sendiri dari sumbernya.
Unduh JDK 8 dari Oracle dan instal.
Versi stabil terbaru dari Android Studio. Saat ini 4.1.1.
Unduh & instal Android SDK Build-Tools 29.0.3 , Android Pie (API 29) (misalnya melalui Android SDK Manager Android Studio).
Instal CMake versi 3.18.4 dan bangun Ninja.
Instal NDK (Berdampingan) 21.0.6113669 dari SDK Manager di Android Studio. Ingatlah untuk memeriksa ☑ Show package details
di manajer untuk menampilkan semua versi yang tersedia.
Tambahkan variabel lingkungan rumah Android ke profil Anda:
export ANDROID_HOME=~/Library/Android/sdk
Jika Anda meluncurkan Android Studio dari macOS Finder, Anda juga harus menjalankan perintah berikut:
launchctl setenv ANDROID_HOME "$ANDROID_HOME"
Jika Anda ingin menentukan lokasi untuk menyimpan arsip Realm Core, tentukan variabel lingkungan REALM_CORE_DOWNLOAD_DIR
. Ini memungkinkan cache artefak rilis inti.
export REALM_CORE_DOWNLOAD_DIR=~/.realmCore
pengguna macOS juga harus menjalankan perintah berikut agar Android Studio dapat melihat variabel lingkungan ini.
launchctl setenv REALM_CORE_DOWNLOAD_DIR "$REALM_CORE_DOWNLOAD_DIR"
Sebaiknya tambahkan semua definisi simbol (dan perintah launchctl
yang menyertainya, jika Anda menggunakan macOS) ke ~/.profile
Anda (atau ~/.zprofile
jika shell loginnya adalah zsh
)
Jika Anda mengembangkan Realm Java dengan Android Studio, kami menyarankan Anda untuk mengecualikan beberapa direktori dari target pengindeksan dengan menjalankan langkah-langkah berikut di Android Studio. Ini benar-benar mempercepat fase pengindeksan setelah pembangunan.
/realm/realm-library/
, pilih folder build
, .cxx
dan distribution
dalam tampilan Project
.Command + Shift + A
untuk membuka dialog Find action
. Jika Anda tidak menggunakan peta tombol default atau menggunakan macOS, Anda dapat menemukan tombol pintasan di preferensi Keymap
dengan mencari Find action
.Excluded
(bukan Exclude
) dan pilih tindakan tersebut. Ikon folder yang dipilih akan berubah menjadi oranye (dalam tema default). Anda dapat mendownload kode sumber Realm Java dengan menggunakan git. Karena realm-java memiliki submodul git, gunakan --recursive
saat mengkloning repositori.
git clone [email protected]:realm/realm-java.git --recursive
atau
git clone https://github.com/realm/realm-java.git --recursive
Setelah Anda menyelesaikan semua prasyarat, pembangunan Realm dilakukan dengan perintah sederhana.
./gradlew assemble
Perintah itu akan menghasilkan:
Pembangunan penuh mungkin memerlukan waktu satu jam atau lebih untuk diselesaikan.
Dimungkinkan untuk membangun Realm Java dengan versi submodul Realm Core. Hal ini dilakukan dengan memberikan parameter berikut saat membangun: -PbuildCore=true
.
./gradlew assembleBase -PbuildCore=true
Anda dapat mematikan optimasi antarprosedural dengan parameter berikut: -PenableLTO=false
.
./gradlew assembleBase -PenableLTO=false`
Catatan: Membangun varian Base
akan selalu membangun inti ranah.
Catatan: Pengoptimalan antarprosedural diaktifkan secara default.
Catatan: Jika Anda ingin membangun dari sumber di dalam Android Studio, Anda perlu memperbarui parameter Gradle dengan masuk ke pengaturan proyek Realm Settings > Build, Execution, Deployment > Compiler > Command-line options
dan tambahkan -PbuildCore=true
atau -PenableLTO=false
untuk itu. Atau Anda dapat menambahkannya ke gradle.properties
Anda :
buildCore=true
enableLTO=false
Catatan: Jika membangun di OSX, Anda mungkin ingin mencegah Gatekeeper memblokir semua executable NDK dengan menonaktifkannya: sudo spctl --master-disable
. Ingatlah untuk mengaktifkannya setelahnya: sudo spctl --master-enable
./gradlew tasks
akan menampilkan semua tugas yang tersedia./gradlew javadoc
akan menghasilkan Javadocs./gradlew monkeyExamples
akan menjalankan pengujian monyet pada semua contoh./gradlew installRealmJava
akan menginstal perpustakaan Realm dan plugin ke mavenLocal()./gradlew clean -PdontCleanJniFiles
akan menghapus semua file yang dihasilkan kecuali file terkait JNI. Ini sangat mengurangi waktu kompilasi ulang../gradlew connectedUnitTests -PbuildTargetABIs=$(adb shell getprop ro.product.cpu.abi)
akan membuat file JNI hanya untuk ABI yang sesuai dengan perangkat yang terhubung. Tes ini memerlukan Object Server yang sedang berjalan (lihat di bawah)Menghasilkan Javadoc menggunakan perintah di atas mungkin menghasilkan peringatan. Javadoc tetap dihasilkan meskipun ada peringatan.
Semua proyek gradle di repositori ini memiliki tugas wrapper
untuk menghasilkan Gradle Wrapper. Tugas-tugas tersebut mengacu pada properti gradle
yang ditentukan di /dependencies.list
untuk menentukan Versi Gradle dalam menghasilkan pembungkus. Kami memiliki skrip ./tools/update_gradle_wrapper.sh
untuk mengotomatiskan langkah-langkah ini. Saat Anda memperbarui Gradle Wrappers, harap patuhi langkah-langkah berikut.
gradle
yang ditentukan di /dependencies.list
ke versi Gradle Wrapper baru./tools/update_gradle_wrapper.sh
.Repositori ini disusun menjadi enam proyek Gradle:
realm
: berisi perpustakaan sebenarnya (termasuk lapisan JNI) dan pemroses anotasi.realm-annotations
: berisi anotasi yang ditentukan oleh Realm.realm-transformer
: berisi transformator bytecode.gradle-plugin
: berisi plugin Gradle.examples
: berisi contoh proyek. Proyek ini secara langsung bergantung pada gradle-plugin
yang menambahkan ketergantungan pada artefak yang dihasilkan oleh realm
. Artinya ./gradlew clean
dan ./gradlew cleanExamples
akan gagal jika assembleExamples
belum dijalankan terlebih dahulu. Perhatikan bahwa IntelliJ tidak mendukung banyak proyek di jendela yang sama sehingga masing-masing dari enam proyek Gradle harus diimpor sebagai proyek IntelliJ terpisah.
Karena repositori berisi beberapa proyek Gradle yang sepenuhnya independen, beberapa build independen dijalankan untuk merakitnya. Melihat baris seperti: :realm:realm-library:compileBaseDebugAndroidTestSources UP-TO-DATE
di log build tidak berarti Anda dapat menjalankan ./gradlew :realm:realm-library:compileBaseDebugAndroidTestSources
.
Folder ./examples
berisi banyak contoh proyek yang menunjukkan bagaimana Realm dapat digunakan. Jika ini pertama kalinya Anda checkout atau mengambil versi baru repositori ini untuk mencoba contohnya, Anda harus memanggil ./gradlew installRealmJava
dari direktori tingkat atas terlebih dahulu. Jika tidak, contoh tidak akan dapat dikompilasi karena bergantung pada semua artefak Realm yang dipasang di mavenLocal()
.
Contoh mandiri dapat diunduh dari situs web.
Untuk menjalankan tes ini, Anda harus memiliki perangkat yang terhubung ke komputer build, dan perintah adb
harus ada di PATH
Anda
Hubungkan perangkat Android dan verifikasi bahwa perintah adb devices
menunjukkan perangkat yang terhubung:
adb devices
List of devices attached
004c03eb5615429f device
Jalankan tes instrumentasi:
cd realm
./gradlew connectedBaseDebugAndroidTest
Tes ini mungkin memerlukan waktu hingga setengah jam untuk diselesaikan.
Pengujian di realm/realm-library/src/syncIntegrationTest
memerlukan server pengujian yang berjalan agar dapat berfungsi. Gambar buruh pelabuhan dapat dibuat dari tools/sync_test_server/Dockerfile
untuk menjalankan server pengujian. tools/sync_test_server/start_server.sh
akan membuat image buruh pelabuhan secara otomatis.
Untuk menjalankan server pengujian secara lokal:
Instal buruh pelabuhan dan jalankan.
Jalankan tools/sync_test_server/start_server.sh
:
cd tools/sync_test_server
./start_server.sh
Perintah ini tidak akan selesai sampai server berhenti.
Jalankan tes instrumentasi
Di jendela terminal baru, jalankan:
cd realm
./gradlew connectedObjectServerDebugAndroidTest
Perhatikan bahwa jika menggunakan VirtualBox (Genymotion), jaringan perlu dijembatani agar pengujian dapat berfungsi. Ini dilakukan di VirtualBox > Network
. Setel "Adaptor 2" ke "Adaptor yang Dijembatani".
Tes ini mungkin memerlukan waktu hingga setengah jam untuk diselesaikan.
Lihat CONTRIBUTING.md untuk lebih jelasnya!
Proyek ini mematuhi Kode Etik MongoDB. Dengan berpartisipasi, Anda diharapkan menjunjung tinggi kode ini. Silakan laporkan perilaku yang tidak dapat diterima ke [email protected].
Direktori realm/config/studio
berisi file lint dan style yang direkomendasikan untuk kode proyek. Impor dari Android Studio dengan Android Studio > Preferensi... > Gaya Kode > Kelola... > Impor, atau Android Studio > Preferensi... > Inspeksi > Kelola... > Impor. Setelah diimpor, pilih gaya/lint di drop-down di sebelah kiri tombol Kelola....
Realm Java diterbitkan di bawah lisensi Apache 2.0.
Realm Core juga diterbitkan di bawah lisensi Apache 2.0 dan tersedia di sini.
Jika Anda menggunakan Realm dan menyukainya, yang kami minta hanyalah Anda, mohon pertimbangkan untuk mengirimkan tweet yang menyebutkan @realm untuk membagikan pemikiran Anda!
Dan jika Anda tidak menyukainya, beri tahu kami apa yang ingin Anda perbaiki, sehingga kami dapat memperbaikinya!