Klepton is een relinker en compatibiliteitslaag waarmee Quest/Android XR APK's kunnen worden uitgevoerd op visionOS en macOS. De tool klepton-ld vertaalt Android .so-bibliotheken naar Apple-compatibele .dylib- en .framework-bestanden.
De technische architectuur bestaat uit:
- Grafische vertaling: GLES 3.2 wordt via ANGLE vertaald naar Metal, en Vulkan wordt vertaald via MoltenVK.
- Klepton Runtime: Deze laag vervangt Android-specifieke libraries (zoals
libc en libm) door Apple's libSystem en biedt synthetische implementaties voor JNI en OVR.
- Register patching: Om conflicten met macOS te voorkomen, wordt het gebruik van het
x18-register gepatcht naar per-bibliotheek TLS-slots.
Klepton richt zich momenteel op "Java-thin" applicaties. Een concreet voorbeeld van succes is Beat Saber, dat inmiddels werkt op zowel macOS als visionOS, hoewel de integratie met Steam VR Link nog in ontwikkeling is.
Klepton: Android ARM64 VR APK's draaien op Apple Vision Pro en macOS
Architectuur
De tool klepton-ld vertaalt Android .so-bibliotheken naar Apple .dylib- en .framework-bibliotheken, die vervolgens worden gekoppeld aan de Klepton-runtime. Op dit moment richt Klepton zich uitsluitend op "Java-thin" applicaties (zonder ART of JVM).
Grafische vertaling
Voor de weergave wordt gebruikgemaakt van de volgende vertalingen:
- GLES 3.2 wordt vertaald naar een geïntegreerde ANGLE GLES 3.0 (met Metal-backend).
- Vulkan wordt vertaald naar MoltenVK.
Systeemstructuur
De architectuur is als volgt opgebouwd:
- Guest: Vertaalde Mach-O bestanden waarbij de instructiebytes grotendeels ongewijzigd blijven (bijv.
libil2cpp, libunity, libunityopus, libmain, burst).
- Klepton Runtime: De imports worden via
klepton-ld opgelost naar de runtime, bestaande uit:
libklepton_bionic: Vertaalt libc/libm/libdl/pthread/liblog naar libSystem.
libklepton_ndk: Bevat ALooper, ANativeWindow, ASensor en AAsset.
libklepton_jni: Een synthetische JavaVM / JNIEnv.
libkleptonovrp: Een reimplementatie van ovrp*.
- Frontend platform (
mains) en OS-specifics: De onderste laag die communiceert met het besturingssysteem via:
- MoltenVK (Vulkan → Metal) en ANGLE (GLES 3.0).
- Compositor Services, ARKit, GameController en AVAudioEngine.
Technische details over x18 en JIT
Zowel Android als macOS reserveren het x18-register, maar veel oudere Android-applicaties maken hier nog gebruik van. Aangezien macOS x18 op nul zet bij context switches, wordt al het gebruik van x18 door klepton-ld gepatcht, zodat er in plaats daarvan per-bibliotheek TLS-slots worden gebruikt.
Klepton kan .so-bestanden tijdens runtime laden en patchen met mmap. Dit is echter voornamelijk nuttig op macOS, waar JIT is toegestaan. Het is waarschijnlijk dat sommige applicaties JIT vereisen als ze gebruikmaken van scripting-runtimes zoals LuaJIT of V8.
Bouwen
Voor de volledige handleiding kan worden verwezen naar BUILDING.md. De verkorte versie is als volgt:
Host-afhankelijkheden installeren:
brew install pkg-config sdl3 apktool
APK voorbereiden:
apktool d -f -o beatsaber beatsaber.apk
(De gebruiker dient zelf de APK aan te leveren; zie BUILDING.md voor details)
Controleren:
make check
(Voert een volledige regressietest uit)
Scripts voor snelle uitvoering
./buildrunviewer.sh: Bouwt en start de macOS Beat Saber frontend.
./buildrunvpro.sh: Bouwt en start de Vision Pro Beat Saber frontend.
./buildrunslink.sh --shell --view: macOS Steam VR Link frontend (momenteel in ontwikkeling).
Status
Beat Saber werkt momenteel op macOS en visionOS, al zijn er nog enkele kleine grafische problemen aanwezig. De integratie van Steam VR Link en het verbeteren van de algemene bruikbaarheid en build-tooling zijn nog in ontwikkeling (WIP).
Klepton: Android ARM64 VR APK's draaien op Apple Vision Pro en macOS
Architectuur
De tool klepton-ld vertaalt Android .so-bibliotheken naar Apple .dylib- en .framework-bibliotheken, die vervolgens worden gekoppeld aan de Klepton-runtime. Op dit moment richt Klepton zich uitsluitend op "Java-thin" applicaties (zonder ART of JVM).
Grafische vertaling
Voor de weergave wordt gebruikgemaakt van de volgende vertalingen:
- GLES 3.2 wordt vertaald naar een geïntegreerde ANGLE GLES 3.0 (met Metal-backend).
- Vulkan wordt vertaald naar MoltenVK.
Systeemstructuur
De architectuur is als volgt opgebouwd:
- Guest: Vertaalde Mach-O bestanden waarbij de instructiebytes grotendeels ongewijzigd blijven (bijv.
libil2cpp, libunity, libunityopus, libmain, burst).
- Klepton Runtime: De imports worden via
klepton-ld opgelost naar de runtime, bestaande uit:
libklepton_bionic: Vertaalt libc/libm/libdl/pthread/liblog naar libSystem.
libklepton_ndk: Bevat ALooper, ANativeWindow, ASensor en AAsset.
libklepton_jni: Een synthetische JavaVM / JNIEnv.
libkleptonovrp: Een reimplementatie van ovrp*.
- Frontend platform (
mains) en OS-specifics: De onderste laag die communiceert met het besturingssysteem via:
- MoltenVK (Vulkan → Metal) en ANGLE (GLES 3.0).
- Compositor Services, ARKit, GameController en AVAudioEngine.
Technische details over x18 en JIT
Zowel Android als macOS reserveren het x18-register, maar veel oudere Android-applicaties maken hier nog gebruik van. Aangezien macOS x18 op nul zet bij context switches, wordt al het gebruik van x18 door klepton-ld gepatcht, zodat er in plaats daarvan per-bibliotheek TLS-slots worden gebruikt.
Klepton kan .so-bestanden tijdens runtime laden en patchen met mmap. Dit is echter voornamelijk nuttig op macOS, waar JIT is toegestaan. Het is waarschijnlijk dat sommige applicaties JIT vereisen als ze gebruikmaken van scripting-runtimes zoals LuaJIT of V8.
Bouwen
Voor de volledige handleiding kan worden verwezen naar BUILDING.md. De verkorte versie is als volgt:
Host-afhankelijkheden installeren:
brew install pkg-config sdl3 apktool
APK voorbereiden:
apktool d -f -o beatsaber beatsaber.apk
(De gebruiker dient zelf de APK aan te leveren; zie BUILDING.md voor details)
Controleren:
make check
(Voert een volledige regressietest uit)
Scripts voor snelle uitvoering
./buildrunviewer.sh: Bouwt en start de macOS Beat Saber frontend.
./buildrunvpro.sh: Bouwt en start de Vision Pro Beat Saber frontend.
./buildrunslink.sh --shell --view: macOS Steam VR Link frontend (momenteel in ontwikkeling).
Status
Beat Saber werkt momenteel op macOS en visionOS, al zijn er nog enkele kleine grafische problemen aanwezig. De integratie van Steam VR Link en het verbeteren van de algemene bruikbaarheid en build-tooling zijn nog in ontwikkeling (WIP).