Javaランタイムに依存せずにデスクトップJavaゲームを配布するにはどうすればよいですか?


9

Javaアプリケーションを「そのまま」実行するスタンドアロンパッケージに変換することは可能ですか?エンドユーザーは、Java JREをインストールする必要はありません。また、インストーラーにJREが含まれていて、ユーザーのためにインストールする必要もありません。

最終的なディストリビューションには、通常のデータファイルおよび必要に応じて追加のJARとともに、ネイティブ実行可能ファイル(できればWindows、Mac、およびLinuxごとに1つ)が含まれている必要があります。特に「1つのファイル」ソリューションを探しているわけではありません。実際には、データファイルを難読化しないでください。

これはどのように行うことができますか?

回答:


8

主なポイントは、エンドユーザーがJava JREをインストールする必要がないこと、およびインストーラーにJREが含まれていてユーザーのためにインストールする必要がないことです。

Javaソース/バイトコードを使用して、コードコンパイラを機械加工できます。ありエクセルシオールJETのWindowsおよびLinux用(ライセンスが必要)とJava用のGNUコンパイラ古いです。

インストールせずにゲームにJavaを含めることに問題がない場合は、Javaランタイムをゲームにパッケージ化し、ゲームJAVA_HOMEを起動する前に開始スクリプトを使用してJRTの場所を設定できます。

編集:(コメント応答)2番目のオプションを使用する場合でも、そのプラットフォームに適切なJavaランタイムを使用して、プラットフォームごとに異なるビルドが必要になります。

EDIT2 AsloはDmitryの最近のコメントも参照してください。



2番目のオプションは適切に聞こえますが、Windows JREをパッケージ化すると、クロスプラットフォームですか?Excelsiorと同様に、このようなコンパイラを3つの異なるOSで実行する必要がありますか?
レオクホーン2013年

1
そのプラットフォームJREをリリースごとにバンドルする必要がありますが、基本的にはクロスプラットフォームのままです。
デレク、

1
@leokhornある時点で、ネイティブコードが必要になります。ネイティブコードにコンパイルするか、ネイティブVMで実行する必要があります。何の計画C.ありません
エイドリアン

1
GCJは今 正式に、Excelsior JET Standard Editionは商用利用無料になりましたが、配布の容易さが唯一の懸念である場合、多くの代替案
Dmitry Leskov

1

Macの場合、Mac 用のJavaアプリのパッケージ化についてはOracleのドキュメントを参照してください。Java 7をセットアップして、Mac App Storeでの配布に必要なjarファイル(.appは実際に実行可能ファイルとして扱われるフォルダー)を含むアプリケーションバンドルにランタイムをバンドルできるようにしました。基本的に、.appバンドルはErenのJAVA_HOME回答が示唆するものとほとんど同じですが、「ネイティブ」のMacアプリとしてパッケージ化されています。

Mac App Storeなしで配布する場合は、アプリに署名せずに済むので、マウンテンライオンのユーザーに、アプリを右クリック(またはCtrl +クリック)して[開く]をクリックすることでGatekeeperを回避できることを伝えます。まずアプリを開きます。これにより、アプリが署名されていないことが警告されますが、とにかくアプリを開くことができ、その後、アプリをダブルクリックして開くことができます。

(補足:Linuxスタイルのシェルスクリプトを実行可能としてマークして、その周りに.appバンドルを構築することもできます。NetBeansは、バンドルされたJRE / JDKがなくても、MacとLinuxでこれを行います)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.