Невероятно! San Andreas на ОС Аврора!
Разработчик-энтузиаст @erhoof подготовил порт легендарной GTA: San Andreas для ОС Аврора. За основу взят порт GTA SA для PS Vita, который, в свою очередь, построен на Android-версии игры.
Подход интересен тем, что это не эмуляция и не переписывание движка. По духу это ближе всего к тому, как Wine запускает Windows-приложения на Linux: инструкции процессора выполняются нативно, транслируются только вызовы к чужому API. Здесь ровно та же идея, только вместо Win32 оборачивается Android. Чуть подробнее - под спойлером.
"Мобильная GTA SA собрана с помощью Android NDK и поставляется в виде нативной ARM-библиотеки `libGTASA.so`. Сам код игры - это обычный C++, никакой Java внутри нет; с Android-окружением он общается только через несколько «точек соприкосновения».
Чтобы запустить такой .so на Авроре, пишется so-loader: он загружает библиотеку игры в память, разбирает её таблицу импортов и подменяет каждый внешний символ на нативную реализацию для Авроры. Создание окна, инициализация GLES-контекста, вывод звука, ввод, работа с файлами, JNI-заглушки - всё это реализуется поверх API целевой ОС. Сам код игры при этом не трогается и исполняется процессором как есть - ровно поэтому это не эмулятор.
Разработчик-энтузиаст @erhoof подготовил порт легендарной GTA: San Andreas для ОС Аврора. За основу взят порт GTA SA для PS Vita, который, в свою очередь, построен на Android-версии игры.
Подход интересен тем, что это не эмуляция и не переписывание движка. По духу это ближе всего к тому, как Wine запускает Windows-приложения на Linux: инструкции процессора выполняются нативно, транслируются только вызовы к чужому API. Здесь ровно та же идея, только вместо Win32 оборачивается Android. Чуть подробнее - под спойлером.
"Мобильная GTA SA собрана с помощью Android NDK и поставляется в виде нативной ARM-библиотеки `libGTASA.so`. Сам код игры - это обычный C++, никакой Java внутри нет; с Android-окружением он общается только через несколько «точек соприкосновения».
Чтобы запустить такой .so на Авроре, пишется so-loader: он загружает библиотеку игры в память, разбирает её таблицу импортов и подменяет каждый внешний символ на нативную реализацию для Авроры. Создание окна, инициализация GLES-контекста, вывод звука, ввод, работа с файлами, JNI-заглушки - всё это реализуется поверх API целевой ОС. Сам код игры при этом не трогается и исполняется процессором как есть - ровно поэтому это не эмулятор.