Эмуляторы Java на Android: как запускать старые J2ME-игры

Эмуляторы Java на Android: как запускать старые J2ME-игры Полезное

Эмулятор Java на Android — это приложение, которое запускает на современном смартфоне старые мобильные игры и программы формата J2ME (Java ME) — те самые, что стояли на кнопочных телефонах Nokia, Sony Ericsson, Siemens и Samsung. Файл игры (обычно .jar) открывается внутри эмулятора, а не устанавливается как обычное приложение Android.

Ниже разбираю, чем именно запускать J2ME-игры на Android, чем старые игры на Java отличаются от современных, как запустить первый мидлет по шагам и что делать с 3D-играми и ошибками.

Игры на Java: старые J2ME и современные Android — это разное

Слово «Java» в разговоре про телефоны означает две очень разные вещи, и их постоянно путают.

  • J2ME (Java ME, Java 2 Micro Edition) — платформа для кнопочных телефонов эпохи до смартфонов. Игры и программы для нее называются мидлетами (MIDlet) и поставляются файлами .jar (архив с кодом и ресурсами) и .jad (текстовый дескриптор с описанием). Именно для них нужен эмулятор.
  • Современные игры на Android тоже пишут на Java или Kotlin, но это обычные приложения (APK), которые устанавливаются и работают напрямую через среду выполнения Android (ART). Эмулятор им не нужен.

Отсюда простое правило: эмулятор J2ME нужен только для старых мобильных игр в формате мидлета. Современную 3D-игру из магазина приложений он не запустит — ее и не требуется эмулировать, она ставится как любое приложение.

Что нужно, чтобы запустить старую игру

Понадобятся три вещи:

  1. Смартфон на Android и установленный эмулятор J2ME (о выборе — ниже).
  2. Файл самой игры — мидлет в формате .jar (иногда рядом лежит .jad).
  3. Готовность к тому, что игра рассчитана на маленький экран и цифровую клавиатуру: управление в эмуляторе выносится на экранные кнопки.

Про форматы файлов. .jar — это архив с классами Java и ресурсами игры, его одного достаточно для запуска. .jad — сопроводительный текстовый файл с названием, размером и правами доступа; он нужен не всегда. Легально брать можно собственные старые игры или мидлеты, которые распространяет сам правообладатель.

Чем запускать: эмуляторы J2ME

Живых и поддерживаемых решений немного. Ниже — те, что работают на современных устройствах.

Эмулятор Платформа Когда выбрать
J2ME Loader Android Основной вариант для телефона: запуск .jar и .jad прямо на Android
FreeJ2ME Windows, Linux, RetroArch Когда играть удобнее на ПК или ретро-консоли через libretro-ядро

J2ME Loader — самый распространенный эмулятор J2ME для Android (пакет приложения ru.playsoftware.j2meloader). Он конвертирует мидлет в свой внутренний формат прямо на устройстве, поддерживает множество 2D-игр, экранную клавиатуру, масштабирование картинки и отдельные настройки для каждой игры. В 2022 году в него влили проект JL-Mod с открытой реализацией 3D-движка Mascot Capsule, поэтому часть 3D-игр тоже запускается.

FreeJ2ME — открытый эмулятор для ПК и ретро-устройств. Он реализует профиль MIDP 2.0 и расширения Nokia, Siemens и Motorola, работает как ядро libretro внутри RetroArch, а также в виде отдельных сборок с интерфейсами AWT и SDL2. Для запуска нужна установленная на компьютере Java. Это выбор для тех, кому удобнее играть не на телефоне.

Как запустить игру в J2ME Loader по шагам

  1. Установите J2ME Loader из магазина приложений на телефон.
  2. Скачайте файл игры в формате .jar в память устройства.
  3. Откройте эмулятор и нажмите кнопку добавления игры (значок «плюс»), укажите путь к .jar.
  4. Эмулятор сконвертирует мидлет и добавит его в список — это разовая операция для каждой игры.
  5. Нажмите на игру в списке, чтобы запустить ее. На экране появятся клавиши, повторяющие клавиатуру телефона.
  6. Долгое нажатие на игру в списке открывает ее индивидуальные настройки: размер экрана, раскладку клавиш, поворот.

Результат: старая игра запускается в окне эмулятора с экранными кнопками вместо аппаратной клавиатуры. Настройки каждой игры хранятся отдельно, так что подгонка одной не ломает остальные.

3D-игры и ограничения

Не все старые игры запускаются одинаково хорошо, и это нормально.

Большинство J2ME-игр двухмерные, и с ними у J2ME Loader меньше всего проблем. Трехмерные игры на кнопочных телефонах чаще всего использовали движок Mascot Capsule; его открытую реализацию J2ME Loader получил вместе с JL-Mod, поэтому ряд 3D-игр работает.

Полной совместимости со всеми 3D-мидлетами при этом нет: часть игр опиралась на фирменные API отдельных производителей или на особенности конкретного железа, которые в эмуляторе воспроизведены не целиком. Практический итог: 2D-классика запускается почти всегда, а с 3D — как повезет с конкретной игрой. Если одна 3D-игра не пошла, это не значит, что не пойдет другая.

Если игра не запускается

Типовые ситуации и что делать:

  • Игра не добавляется или вылетает при конвертации. Возможно, файл поврежден или это вовсе не мидлет, а, например, тема оформления или Android-приложение. Убедитесь, что расширение именно .jar и файл рассчитан на J2ME.
  • Черный экран или игра «висит». Часто помогает смена настроек конкретной игры: другой размер экрана, отключение сглаживания, другая раскладка клавиш в индивидуальных параметрах.
  • Управление не отзывается. В настройках игры включите или перенастройте экранную клавиатуру: в старых играх действия привязаны к конкретным клавишам телефона (например, «5» — действие, «*» и «#» — функции).
  • 3D-игра идет с графическими артефактами. Это ограничение реализации 3D; можно попробовать другую сборку эмулятора или принять, что конкретная игра поддерживается лишь частично.

Смежные темы: Android Studio: что это такое, как обновить версию Java.

FAQ

Можно ли запускать J2ME-игры без эмулятора? На современном Android — нет: система не исполняет мидлеты напрямую, для этого и нужен эмулятор. Исключение — старый телефон с родной поддержкой Java, но таких устройств почти не осталось.

Чем .jar отличается от .jad? .jar — это сам архив с кодом и ресурсами игры, его достаточно для запуска. .jad — небольшой текстовый дескриптор с названием и параметрами; эмуляторы обычно принимают оба варианта.

Пойдут ли мои старые сохранения с телефона? Как правило нет: сейвы были привязаны к конкретной модели телефона и ее хранилищу. В эмуляторе прогресс начинается заново, дальше игра сохраняется уже средствами эмулятора.

Выводы

Эмулятор Java на Android решает одну узкую задачу — запуск старых мобильных игр формата J2ME, которые современный телефон иначе не откроет. Для Android основной инструмент — J2ME Loader: он запускает .jar-мидлеты, а после слияния с JL-Mod тянет и часть 3D через Mascot Capsule. Для игры на ПК или ретро-консоли подойдет FreeJ2ME. 2D-классика запускается почти всегда, с 3D возможны ограничения, а современные игры на Android в эмуляторе не нуждаются — они и так работают напрямую.

Освойте тему на практике

Разбор со старыми играми — удобный повод понять, как устроена сама платформа Android: почему одни приложения работают напрямую, а другим нужен слой совместимости, как приложение упаковано и как система его запускает. С этих же вопросов начинается и разработка под Android. Освоить ее с нуля можно на курсе Android-разработчика, а посмотреть формат занятий и преподавателей — на открытых уроках и вебинарах.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)