Klepton запускает Android VR-приложения на Apple Vision Pro

Klepton запускает Android VR-приложения на Apple Vision Pro

Klepton, открытый проект, который позволяет запускать Android ARM64 VR-приложения на Apple Vision Pro, не требуя JIT-компиляции. Компонент klepton-ld переводит Android-библиотеки .so в загружаемые Apple-библиотеки .dylib и .framework, которые затем подключаются к рантайму Klepton. Сейчас Klepton поддерживает только «Java-тонкие» приложения, то есть без ART и без JVM.

Графика транслируется отдельно: GLES 3.2 переводится во встроенный ANGLE с поддержкой GLES 3.0 (через его Metal-бэкенд), а Vulkan, в MoltenVK.

Отдельная техническая проблема, регистр x18. И Android, и macOS резервируют этот регистр, но многие старые Android-приложения всё равно его используют, а macOS обнуляет x18 при переключении контекста. klepton-ld патчит все обращения к x18, заменяя их на TLS-слоты (thread-local storage) для каждой библиотеки отдельно.

Klepton умеет загружать и патчить .so-файлы во время выполнения через mmap, но эта возможность полезна только на macOS, где JIT действительно разрешён. Автор отмечает, что приложениям, использующим скриптовые движки вроде LuaJIT или V8, скорее всего, всё равно понадобится JIT, то есть они на Vision Pro запустятся не всегда.

В качестве демонстрации Beat Saber работает на macOS и visionOS с небольшими графическими артефактами. Поддержка Steam VR Link и улучшение общей совместимости и сборочных инструментов пока в разработке. Чтобы собрать и запустить проект, нужно установить зависимости через brew (pkg-config, sdl3, apktool), распаковать собственный APK-файл приложения через apktool, прогнать make check и запустить один из скриптов сборки, для macOS-вьювера, для фронтенда Vision Pro или для (пока незавершённого) Steam VR Link.

Ключевые факты

  • klepton-ld переводит Android-библиотеки .so в Apple .dylib и .framework, которые подключаются к рантайму Klepton
  • Поддерживаются только «Java-тонкие» приложения, без ART и без JVM
  • Графика: GLES 3.2 транслируется через ANGLE (GLES 3.0, Metal-бэкенд), Vulkan, через MoltenVK
  • Отдельно решена проблема с регистром x18, который macOS обнуляет при переключении контекста, klepton-ld патчит его на TLS-слоты
  • Демо, Beat Saber, работает на macOS и visionOS с небольшими графическими артефактами; Steam VR Link ещё в разработке

Почему это важно

Klepton, редкий рабочий пример бинарной трансляции: приложения для Android ARM64 запускаются на Apple Vision Pro без перекомпиляции и, что важно, без JIT, режима, который на большинстве Apple-платформ ограничен. Проект переводит графические API (GLES и Vulkan) в нативные для Apple ANGLE и MoltenVK, а также воспроизводит специфичные для Android рантайм-примитивы вроде JNI и Looper. То, что при этом уже запускается конкретная популярная VR-игра, Beat Saber, показывает, что подход работает не только в теории.

Кому это важно

В первую очередь, владельцам Apple Vision Pro, которым не хватает VR-контента: платформа Android VR (Quest и аналоги) заметно богаче играми. Также это интересно разработчикам, которые занимаются переносом приложений между платформами и низкоуровневой бинарной трансляцией, и всем, кто интересуется технической стороной бинарной трансляции Android-приложений на Apple Silicon.

Как это применить

Klepton, open-source проект на GitHub, а не готовое приложение из App Store. Чтобы попробовать, нужно собрать его самостоятельно: установить зависимости через Homebrew (pkg-config, sdl3, apktool), распаковать собственный APK-файл нужного приложения через apktool, прогнать регрессионные тесты (make check) и запустить один из скриптов, для сборки под macOS, под Vision Pro или (пока в разработке) для моста Steam VR Link.

Можно ли доверять

В самом тексте не указаны ни автор или команда проекта, ни номер версии, ни лицензия, ни бенчмарки производительности, оценить зрелость и стабильность решения по одному описанию сложно. При этом архитектура подробно расписана (схема слоёв рантайма, конкретные библиотеки и API), а работоспособность подтверждена конкретным примером, Beat Saber на macOS и visionOS, пусть и с оговоркой о небольших графических артефактах. Других протестированных игр или приложений в тексте не названо.

Риски и подводные камни

Поддержка ограничена «Java-тонкими» приложениями без ART и JVM, более сложные Android-приложения, вероятно, не запустятся. Часть игр использует скриптовые движки вроде LuaJIT или V8, которым нужен JIT, а он на Vision Pro практически недоступен, такие приложения могут не заработать. Steam VR Link и общая совместимость/сборочные инструменты пока обозначены как незавершённая работа (WIP), а даже рабочая демонстрация с Beat Saber идёт с мелкими графическими проблемами.