samiul@portfolio:~/projects/mobile-java$ cat README.md
09 MobileJava
A full OpenJDK HotSpot 21 running inside an Android app, with guest Java owning the game loop.
samiul@portfolio:~/projects/mobile-java$ cat problem.txt
Android apps run on ART. The goal was the standard desktop JVM, HotSpot, in the same process, with guest Java code driving frames and input.
samiul@portfolio:~/projects/mobile-java$ cat build.log
A bionic-built OpenJDK HotSpot 21 embedded in an Android app and booted in-process via JLI_Launch, a leaner cut of the PojavLauncher architecture. The guest owns the loop: it polls touch over a JNI control bridge and renders an EGL/GLES2 scene through natives it loads itself. It survives HOME and back: the surface is recreated while the EGL context and Java state persist. It runs under a device-tier memory policy (tiered heap, G1 uncommit, SerialGC on low-RAM devices) and ships per-ABI builds, so each APK carries one ~48 MB JRE. Every milestone was verified on an emulator with proof files.
samiul@portfolio:~/projects/mobile-java$ cat highlights.txt
- HotSpot 21 booted in-process via JLI_Launch
- Guest Java owns the frame loop and input over JNI
- Survives HOME/back: context and state outlive the surface
- Device-tier memory policy: G1 uncommit, tiered heap, SerialGC
- Per-ABI JRE packs, ~48 MB per APK, byte-stable builds
samiul@portfolio:~/projects/mobile-java$ cat stack.toml
# mobile-java
jvm = "openjdk hotspot 21 (bionic)"
boot = "jli_launch in-process"
loop = "guest java owns frames + input"
gl = "egl / gles2 via guest natives"
ship = "per-abi jre packs, ~48 mb apks"
stack = ["Java", "JNI", "Android", "OpenGL ES"]
samiul@portfolio:~/projects/mobile-java$ git remote -v
origin github.com/SamiulH25/mobile-java
latest v0.3.0-m5