First task before we can add support for Java JVM is making sure our internal module structure/CI/deployment supports it.
Preliminary TODO list (we need to revisit this before starting development):
First task before we can add support for Java JVM is making sure our internal module structure/CI/deployment supports it.
Preliminary TODO list (we need to revisit this before starting development):
Required
Optional
First task before we can add support for Java JVM is making sure our internal module structure/CI/deployment supports it.
Preliminary TODO list (we need to revisit this before starting development):
First task before we can add support for Java JVM is making sure our internal module structure/CI/deployment supports it.
Preliminary TODO list (we need to revisit this before starting development):
Required
CI support to build core and sync binaries for different platforms. Needed for Roboelectric support for Windows & Linux #2256 and Add support for Robolectric on Max OS X #1867 as well.
-- [x] Android (Already working)
-- [x] Windows + Sync
-- [x] MacOS + Sync
-- [x] Linux + Sync (different variants?)
We need to modify the build scripts to be able to generate versions for both Android and JVM.
-- [ ] We need to be able to build our JNI binding on multiple platforms. How to parallelize our Jenkinsfile to do this? Will also require specific mac support. Can we reuse how Core is doing it?
CMake & reusing existing JNI code (current code is coupled with NDK toolchain)
-- [ ] OpenSSL currently downloading the prebuilt package
libcrypto.afor Android from https://github.com/realm/openssl-android [do] we need to adapt for macOS/Linux/Win?-- [ ] Android specific flag ANDROID_NO_UNDEFINED, ABI_CXX_FLAGS, LINKER_FLAGS,
jni_impl/android_logger.cpp-- [ ] keep GCC 4.9 or use CLANG
-- [ ] Android Prebuilt Libraries (linkage):
-llog-landroid-latomic-- [ ] STL library
libc++/gnustlrealm-gradle-pluginneed to support two modes:realm-androidandrealm-java.-- [ ] Rewrite in Kotlin?
Split existing code into 3 modules:
realm-java-core,realm-java-android,realm-java-jvm(names up for debate).-- [ ] Need a new build.gradle for
realm-java-jvm-- [ ] Figure out how much code should live in each module
Figure out how to run JavaAssist without the Transform API which is Android only.
-- [ ] How to share as much as possible between Transform API and JVM implementation?
-- [ ] Rewrite in Kotlin?
All android dependencies need to be hidden behind interfaces.
-- [ ] Context needs to be abstracted away. Already begun in Replace Context with ContextWrapper #3692.
-- [ ] Our streaming Json support depends on Android classes as well
-- [ ] NetworkStateReceiver
-- [ ]
@RunTestInLooperThread-- [ ] We have quite a few unit tests with android dependencies.
We need to figure out which run loops to support on the JVM, since the Looper does not exist. As a minimum, we need to provide our own.
-- [ ] Support for Spring event loop
-- [ ] Custom event loop for stand alone apps, e.g. Global Notifier
-- [ ] Web containers like Tomcat and friends don't have that concept. Just ignore them?
Optional
realm-java-core