Como um jogo Java para desktop pode ser distribuído sem uma dependência de tempo de execução Java?

9

É possível transformar um aplicativo Java em um pacote independente que é executado "fora da caixa"? O usuário final não deve ser obrigado a instalar nenhum Java JRE, nem o instalador deve conter um JRE e instalá-lo para o usuário.

A distribuição final deve conter um executável nativo (provavelmente um para cada Windows, Mac e Linux) junto com os arquivos de dados regulares e quaisquer JARs extras, se necessário. Não estou procurando uma solução de "um arquivo" especificamente - na verdade, gostaria que os arquivos de dados não fossem ofuscados.

Como isso pode ser feito?

leokhorn
fonte

Respostas:

8

O ponto principal é que o usuário final não deve ser obrigado a instalar nenhum Java JRE, nem o instalador deve conter um JRE e instalá-lo para o usuário

É possível usar a origem / bytecode Java para compilar os códigos de máquina. Existem o Excelsior JET para Windows e Linux (requer licença) e o GNU Compiler for Java, que é antigo.

Se não há problema em conter Java com o seu jogo sem instalá-lo, provavelmente você pode empacotar o Java Runtime com o jogo e usar um script de início para definir JAVA_HOME o local do JRT antes de iniciar o jogo.

EDIT: (resposta do comentário) Usando a segunda opção, você ainda precisará de construções diferentes para plataformas diferentes usando o Java Runtime apropriado para essa plataforma.

EDIT2: Também veja o comentário recente de Dmitry.

Eren Güven
fonte
3
Se o seu jogo não for comercial, você pode obter uma licença grátis do Excelsior JET .
Dmitry Leskov
A segunda opção parece boa, mas se eu empacotar meu Windows JRE, será uma plataforma cruzada? Da mesma forma com o Excelsior, eu precisaria executar esses compiladores nos três sistemas operacionais diferentes?
Leokhorn #
11
Você precisaria agrupar o JRE dessa plataforma em cada release, mas essencialmente ele permanecerá entre plataformas.
Derek
11
@leokhorn Em algum momento, deve haver código nativo. Você precisa compilar o código nativo ou executar em uma VM nativa. Não existe um plano C.
Adrian
11
GCJ é agora oficialmente morto , enquanto Excelsior JET Standard Edition tornou-se livre para uso comercial , bem como, mas se a sua única preocupação é a facilidade de distribuição, há muitas alternativas
Dmitry Leskov
1

Para Mac, consulte a documentação do Oracle para empacotar um aplicativo Java para Mac . Eles configuraram o Java 7 para que você possa agrupar o tempo de execução em um pacote de aplicativos que contém seus arquivos jar (.app é uma pasta realmente tratada como executável), necessária para a distribuição na Mac App Store. Basicamente, o pacote .app faz o mesmo que o que a resposta JAVA_HOME de Eren sugere, mas é empacotado como um aplicativo Mac "nativo".

Para distribuir sem a Mac App Store, você pode não assinar o aplicativo, informando aos usuários do Mountain Lion que eles podem contornar o Gatekeeper clicando com o botão direito do mouse (ou com a tecla Ctrl + clique) no aplicativo e clicando em "Abrir" quando primeiro abra o aplicativo. Isso ainda os avisa que o aplicativo não está assinado, mas permitirá que eles sejam abertos de qualquer maneira e, em seguida, clique duas vezes no aplicativo para as aberturas subsequentes.

(observação: você também pode se livrar da marcação de scripts do shell no estilo Linux como executável e, em seguida, construir um pacote .app em torno disso. O NetBeans faz isso no Mac e Linux, embora sem um JRE / JDK incluído)

O caranguejo
fonte