Bagaimana permainan Java desktop dapat didistribusikan tanpa ketergantungan runtime Java?

9

Apakah mungkin untuk mengubah aplikasi Java menjadi paket mandiri yang berjalan "out of the box"? Pengguna akhir tidak diharuskan untuk menginstal Java JRE, atau pemasang tidak boleh mengandung JRE dan menginstalnya untuk pengguna.

Distribusi akhir harus mengandung executable asli (semoga satu untuk setiap Windows, Mac dan Linux) bersama dengan file data biasa dan setiap JAR tambahan jika diperlukan. Saya tidak mencari solusi "satu file" secara khusus - Saya sebenarnya ingin file data tidak terhambat.

Bagaimana ini bisa dilakukan?

Leokhorn
sumber

Jawaban:

8

Poin utamanya adalah bahwa pengguna akhir tidak diharuskan untuk menginstal Java JRE, atau pemasang tidak boleh mengandung JRE dan menginstalnya untuk pengguna.

Anda dapat menggunakan Java source / bytecode untuk kompiler kode mesin. Ada Excelsior JET untuk Windows dan Linux (memerlukan lisensi) dan GNU Compiler untuk Java yang sudah lama.

Jika tidak masalah untuk memuat Java dengan game Anda tanpa menginstalnya, maka Anda mungkin dapat mengemas Java Runtime dengan game Anda dan menggunakan skrip mulai untuk mengatur JAVA_HOMEke lokasi JRT Anda sebelum meluncurkan game.

EDIT: (respons komentar) Menggunakan opsi kedua, Anda masih akan membutuhkan build yang berbeda untuk platform yang berbeda menggunakan runtime Java yang sesuai untuk platform itu.

EDIT2: Juga lihat komentar terakhir Dmitry

Eren Güven
sumber
3
Jika game Anda non-komersial, Anda bisa mendapatkan lisensi Excelsior JET gratis .
Dmitry Leskov
Opsi kedua terdengar bagus, tetapi jika saya mengemas Windows JRE saya, apakah itu lintas platform? Demikian pula dengan Excelsior, apakah saya perlu menjalankan kompiler seperti itu pada tiga OS yang berbeda?
leokhorn
1
Anda harus menggabungkan platform JRE dengan setiap rilis, tetapi pada dasarnya itu akan tetap lintas platform.
Derek
1
@leokhorn Pada titik tertentu, harus ada kode asli. Entah Anda harus mengkompilasi ke kode asli, atau Anda harus menjalankan pada VM asli. Tidak ada rencana C.
Adrian
1
GCJ sekarang telah resmi mati , sedangkan Excelsior JET Edisi Standar telah menjadi bebas untuk penggunaan komersial juga, meskipun jika satu-satunya masalah Anda adalah kemudahan distribusi, ada banyak alternatif
Dmitry Leskov
1

Untuk Mac, lihat dokumentasi Oracle untuk mengemas aplikasi Java untuk Mac . Mereka telah mengatur Java 7 sehingga Anda dapat mem-bundle runtime ke dalam bundel aplikasi yang berisi file jar Anda (.app benar-benar folder yang dapat dieksekusi), yang diperlukan untuk distribusi di Mac App Store. Pada dasarnya, bundel .app sebagian besar sama dengan apa yang disarankan JAVA_HOME jawaban Eren, tetapi dikemas sebagai aplikasi Mac "asli".

Untuk mendistribusikan tanpa Mac App Store, Anda dapat pergi dengan tidak menandatangani aplikasi, memberi tahu pengguna Mountain Lion Anda bahwa mereka dapat menjelajahi Gatekeeper dengan mengklik kanan (atau ctrl + klik) pada aplikasi Anda dan mengklik "Buka" ketika mereka pertama buka aplikasi. Ini masih akan memperingatkan mereka bahwa aplikasi tersebut tidak ditandatangani, tetapi itu akan memungkinkan mereka untuk membukanya, dan kemudian memungkinkan mereka untuk mengklik dua kali pada aplikasi untuk membuka selanjutnya.

(catatan: Anda juga bisa lolos dengan penandaan skrip shell bergaya Linux sebagai executable dan kemudian membangun bundel .app di sekitarnya. NetBeans melakukan ini di Mac dan Linux, meskipun tanpa JRE / JDK yang dibundel)

Kepiting
sumber