没有Java运行时相关性的情况下,如何分发桌面Java游戏?


9

是否有可能将Java应用程序转换为“开箱即用”运行的独立程序包?最终用户不需要安装任何Java JRE,安装程序也不必包含JRE并为该用户安装。

最终发行版应包含一个本机可执行文件(希望适用于Windows,Mac和Linux),以及常规数据文件和任何其他JAR(如果需要)。我不是在专门寻找“一个文件”解决方案-我实际上是希望数据文件不被混淆。

如何才能做到这一点?

Answers:


8

要点是,最终用户不需要安装任何Java JRE,安装程序也不必包含JRE并为用户安装它

您可以使用Java源代码/字节码来编译代码。有适用于Windows和Linux的Excelsior JET(需要许可证)以及适用于Java的GNU编译器

如果可以在游戏中不包含Java而无需安装Java,则可以将Java Runtime与游戏打包在一起,并在启动游戏之前使用启动脚本将其设置JAVA_HOME为JRT位置。

编辑:(评论响应)使用第二个选项,您仍然需要使用适用于该平台的Java运行时,针对不同平台的不同版本。

EDIT2: Aslo看到Dmitry的最近评论。


3
如果您的游戏是非商业性游戏,则可以获得免费的Excelsior JET许可证
德米特里·莱斯科夫

第二个选项听起来不错,但是如果我打包Windows JRE,它是跨平台的吗?与Excelsior类似,我是否需要在三个不同的OS上运行此类编译器?
leokhorn

1
您将需要在每个发行版中捆绑该平台JRE,但从本质上讲,它将仍然跨平台。
德里克(Derek)

1
@leokhorn在某些时候,必须有本机代码。您要么必须编译为本机代码,要么必须在本机VM上运行。没有计划C。–
阿德里安

1
现在,GCJ已正式死亡,而Excelsior JET Standard Edition也已经免费提供给商业使用,尽管如果您唯一关心的是发行的简便性,则可以选择很多替代方案
Dmitry Leskov

1

对于Mac,请参阅Oracle文档,其中包含用于Mac的Java应用程序。他们设置了Java 7,以便您可以将运行时捆绑到包含jar文件(.app实际上是被视为可执行文件的文件夹)的应用程序捆绑包中,这是在Mac App Store上分发所必需的。基本上,.app软件包的功能与Eren的JAVA_HOME答案所建议的基本相同,但打包为“本机” Mac应用程序。

要在没有Mac App Store的情况下进行分发,您可以不签名应用程序而逃避,告诉Mountain Lion用户可以通过右键单击(或ctrl + click)应用程序并在他们单击“打开”时绕过Gatekeeper。首先打开应用程序。这仍然会警告他们该应用程序尚未签名,但是无论如何它们都将允许他们打开它,然后允许他们双击该应用程序以进行后续打开。

(旁注:您也可以摆脱Linux风格将外壳程序脚本标记为可执行文件,然后围绕该文件构建一个.app捆绑包。NetBeans在Mac和Linux上可以做到这一点,尽管没有捆绑的JRE / JDK)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.