Как можно распространять настольную Java-игру без зависимости от времени выполнения Java?


9

Можно ли превратить приложение Java в автономный пакет, который запускается «из коробки»? Конечный пользователь не должен устанавливать какую-либо Java JRE, а установщик не должен содержать JRE и устанавливать его для пользователя.

Конечный дистрибутив должен содержать собственный исполняемый файл (возможно, по одному для каждой из Windows, Mac и Linux), а также обычные файлы данных и любые дополнительные JAR-файлы, если это необходимо. Я специально не ищу решение «один файл» - мне бы хотелось, чтобы файлы данных были беспрепятственными.

Как это может быть сделано?

Ответы:


8

Суть в том, что конечный пользователь не должен устанавливать какую-либо Java JRE, а установщик не должен содержать JRE и устанавливать его для пользователя.

Вы можете использовать исходный / байт-код Java для компиляторов машинного кода. Есть Excelsior JET для Windows и Linux (требуется лицензия) и GNU Compiler для Java, который является старым.

Если нормально содержать Java в вашей игре без ее установки, то вы, вероятно, можете упаковать Java Runtime в свою игру и использовать сценарий запуска, чтобы установить JAVA_HOMEместоположение JRT до запуска игры.

РЕДАКТИРОВАТЬ: (комментарий комментария) Используя второй вариант, вам все равно понадобятся разные сборки для разных платформ, использующих соответствующую среду выполнения Java для этой платформы.

РЕДАКТИРОВАТЬ 2 : Также см. Недавний комментарий Дмитрия.


3
Если ваша игра некоммерческая, вы можете получить бесплатную лицензию Excelsior JET .
Дмитрий Лесков

Второй вариант звучит хорошо, но если я упаковываю свою Windows JRE, это кроссплатформенная? Точно так же, как с Excelsior, нужно ли запускать такие компиляторы на трех разных ОС?
leokhorn

1
Вам нужно будет связывать эти платформы JRE с каждым выпуском, но по сути он останется кроссплатформенным.
Дерек

1
@leokhorn В какой-то момент должен быть нативный код. Либо вы должны скомпилировать в собственный код, либо вы должны работать на собственной виртуальной машине. Нет плана C.
Адриан

1
GCJ теперь официально мертв , тогда как Excelsior JET Standard Edition также стала бесплатной для коммерческого использования , хотя, если вас беспокоит только простота распространения, есть много альтернатив
Дмитрий Лесков

1

Для Mac см. Документацию Oracle для упаковки Java-приложения для Mac . Они настроили Java 7 так, что вы можете объединить среду выполнения в пакет приложений, содержащий ваши файлы jar (.app - это папка, которая на самом деле считается исполняемым файлом), что необходимо для распространения в Mac App Store. По сути, пакет .app делает в основном то же, что предлагает ответ Eren's JAVA_HOME, но упакован как «родное» приложение Mac.

Для распространения без Mac App Store вы можете избежать подписания приложения, сообщая пользователям Mountain Lion, что они могут обойти Gatekeeper , щелкнув правой кнопкой мыши (или Ctrl + клик) на вашем приложении и нажав «Открыть», когда они сначала откройте приложение. Это все равно предупредит их о том, что приложение не подписано, но в любом случае позволит им открыть его, а затем разрешит им дважды щелкнуть приложение для последующих открытий.

(примечание: вы также можете обойтись без маркировки сценариев оболочки в стиле Linux как исполняемой и затем создать пакет .app вокруг этого. NetBeans делает это на Mac и Linux, хотя и без JRE / JDK в комплекте)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.