Wie kann ein Desktop-Java-Spiel ohne Java-Laufzeitabhängigkeit verteilt werden?

9

Ist es möglich, eine Java-Anwendung in ein eigenständiges Paket umzuwandeln, das "out of the box" ausgeführt wird? Der Endbenutzer sollte weder verpflichtet sein, eine Java-JRE zu installieren, noch sollte das Installationsprogramm eine JRE enthalten und diese für den Benutzer installieren.

Die endgültige Distribution sollte eine native ausführbare Datei (hoffentlich eine für Windows, Mac und Linux) sowie die regulären Datendateien und zusätzliche JARs enthalten, falls erforderlich. Ich suche nicht speziell nach einer "One File" -Lösung - ich möchte eigentlich, dass Datendateien nicht verschleiert werden.

Wie kann das gemacht werden?

leokhorn
quelle

Antworten:

8

Der Hauptpunkt ist, dass der Endbenutzer weder Java JRE installieren muss, noch dass das Installationsprogramm eine JRE enthält und diese für den Benutzer installiert

Sie können Java-Quell- / Bytecode verwenden, um Code-Compiler zu bearbeiten. Es gibt Excelsior JET für Windows und Linux (Lizenz erforderlich) und GNU Compiler für Java, das alt ist.

Wenn es in Ordnung ist, Java in Ihrem Spiel zu enthalten, ohne es zu installieren, können Sie Java Runtime wahrscheinlich mit Ihrem Spiel verpacken und JAVA_HOMEvor dem Start des Spiels ein Startskript verwenden , um Ihren JRT-Speicherort festzulegen.

BEARBEITEN: (Antwort auf einen Kommentar) Mit der zweiten Option benötigen Sie weiterhin unterschiedliche Builds für unterschiedliche Plattformen, wobei die entsprechende Java-Laufzeit für diese Plattform verwendet wird.

EDIT2: Siehe auch Dmitrys jüngsten Kommentar.

Eren Güven
quelle
3
Wenn Ihr Spiel nicht kommerziell ist, können Sie eine kostenlose Excelsior JET-Lizenz erhalten .
Dmitry Leskov
Die zweite Option klingt gut, aber wenn ich meine Windows-JRE verpacke, ist sie plattformübergreifend? Müsste ich bei Excelsior solche Compiler auf den drei verschiedenen Betriebssystemen ausführen?
Leokhorn
1
Sie müssten diese Plattform-JRE mit jeder Version bündeln, aber im Wesentlichen bleibt sie plattformübergreifend.
Derek
1
@leokhorn Irgendwann muss es nativen Code geben. Entweder müssen Sie zu nativem Code kompilieren oder Sie müssen auf einer nativen VM ausgeführt werden. Es gibt keinen Plan C.
Adrian
1
GCJ ist jetzt offiziell tot , während Excelsior JET Standard Edition auch für den kommerziellen Gebrauch kostenlos ist. Wenn Sie sich jedoch nur um die einfache Verteilung kümmern, gibt es viele Alternativen
Dmitry Leskov
1

Informationen zum Mac finden Sie in der Oracle-Dokumentation zum Packen einer Java-App für Mac . Sie haben Java 7 so eingerichtet, dass Sie die Laufzeit in ein Anwendungspaket bündeln können, das Ihre JAR-Dateien enthält (.app ist ein Ordner, der wirklich als ausführbar behandelt wird), der für die Verteilung im Mac App Store erforderlich ist. Grundsätzlich macht das .app-Bundle meistens das Gleiche wie die JAVA_HOME-Antwort von Eren, ist jedoch als "native" Mac-App verpackt.

Wenn Sie ohne den Mac App Store verteilen, können Sie die App nicht signieren und Ihren Mountain Lion-Benutzern mitteilen, dass sie Gatekeeper umgehen können, indem Sie mit der rechten Maustaste (oder Strg + Klick) auf Ihre App klicken und dann auf "Öffnen" klicken Öffnen Sie zuerst die App. Dadurch werden sie weiterhin gewarnt, dass die App nicht signiert ist. Sie können sie jedoch trotzdem öffnen und anschließend auf die App doppelklicken, um sie anschließend zu öffnen.

(Randnotiz: Sie könnten auch mit der Linux-artigen Kennzeichnung von Shell-Skripten als ausführbar davonkommen und dann ein .app-Bundle erstellen. NetBeans tut dies auf Mac und Linux, allerdings ohne ein gebündeltes JRE / JDK)

Die Krabbe
quelle