Cara Anda melakukannya adalah dengan terlebih dahulu mendapatkan kompiler Haskell yang dapat menargetkan C dengan NDK android yang dilengkapi dengan port GCC untuk arsitektur ARM. JHC sepele dapat melakukan ini dengan file gaya inf sangat kecil yang menggambarkan platform (ukuran kata, c-compiler, dll) Saya sudah melakukan ini dengan kit homebrew dev Wii dan itu cukup mudah. Namun jhc masih memiliki beberapa masalah stabilitas dengan kode kompleks seperti menggunakan tumpukan trafo monad dengan IO tetapi jhc telah meningkat banyak selama 6 bulan terakhir. Hanya ada satu orang yang bekerja di JHC. Saya hanya berharap lebih banyak orang bisa membantunya.
Opsi lainnya adalah membangun port GHC "tidak terdaftar" yang menargetkan ndk gcc, ini lebih banyak proses yang terlibat karena GHC bukan kompilator silang sejati saat ini dan Anda perlu memahami sistem build bagian mana yang Anda butuhkan. perubahan. Opsi lain adalah NHC yang dapat melakukan kompilasi silang ke C, seperti GHC yang Anda butuhkan untuk membangun nhc yang menargetkan kompiler C, NHC tidak memiliki banyak ekstensi Haskell seperti GHC.
Setelah Anda memiliki kompiler Haskell yang menargetkan NDK GCC, Anda harus menulis binding ke kerangka kerja kode lem NDK JNI android (ditambahkan sejak android 2.3) atau Anda harus menulis kode lem JNI antara Java-C-Haskell, opsi sebelumnya adalah lebih mudah solusi dan jika saya ingat dengan benar mungkin sebenarnya kompatibel dengan versi Android sebelumnya di bawah 2.3.
Setelah Anda memiliki ini, Anda harus membangun kode Haskell sebagai shared library atau perpustakaan statis yang akan ditautkan ke kode lem java NDK (yang itu sendiri adalah shared library). Sejauh yang saya ketahui Anda tidak dapat secara resmi menjalankan executable asli di android. Anda mungkin dapat melakukannya dengan ponsel yang di-rooting, jadi saya berasumsi ini berarti Anda tidak dapat mendistribusikan executable asli di app store bahkan ketika port gcc NDK dapat menghasilkan executable asli dengan baik. Ini juga mungkin membunuh opsi untuk menggunakan LLVM kecuali Anda bisa mendapatkan NDK JNI bekerja dengan LLVM.
Rintangan terbesar tidak begitu banyak untuk mendapatkan kompiler Haskell untuk android (yang masih merupakan rintangan besar) masalah terbesar adalah bahwa seseorang perlu menulis API yang mengikat untuk perpustakaan NDK yang merupakan tugas besar dan situasinya lebih buruk jika Anda perlu menulis kode UI Android karena tidak ada NDK API untuk bagian SDK android ini. Jika Anda ingin melakukan kode UI Android di Haskell, seseorang harus menulis binding Haskell ke Java melalui JNI / C. Kecuali ada proses yang lebih otomatis untuk menulis perpustakaan yang mengikat (saya tahu ada beberapa, mereka tidak cukup otomatis untuk saya) maka kemungkinan seseorang melakukannya cukup rendah.
L01man: Apakah ada tutorial tentang cara melakukan ini? Untuk bagian pertama, saya mengerti saya harus mengunduh JHC. Apa yang harus saya tulis di file inf dan bagaimana cara menggunakannya?
Harap dicatat sebelum saya menjawab pertanyaan ini, saya belum pernah menggunakan jhc untuk beberapa waktu sejak saya awalnya menulis ini dan versi yang lebih baru telah dirilis sejak jadi saya tidak tahu seberapa stabil jhc saat ini ketika datang ke pembuatan kode program Haskell yang lebih kompleks. Ini adalah peringatan bagi siapa pun sebelum Anda mempertimbangkan untuk membuat program Haskell besar dengan JHC, Anda harus melakukan beberapa tes kecil sebelum melanjutkan.
jhc memang memiliki manual http://repetae.net/computer/jhc/manual.html dan bagian tentang pengaturan kompilasi silang dan file .ini dengan opsi: http://repetae.net/computer/jhc/manual .html # kompilasi silang .
L01man: Bagian kedua adalah alternatif dari yang pertama. Saya tidak tahu bagaimana melakukan apa yang Anda katakan pada yang ketiga.
Sebelum Anda mulai, Anda harus memiliki pengetahuan tentang C dan merasa nyaman dengan menggunakan antarmuka fungsi asing Haskell (FFI) dan alat-alat seperti hs2c. Anda juga harus terbiasa menggunakan Android NDK dan membangun .apk dengan perpustakaan bersama. Anda perlu mengetahui hal ini untuk menghubungkan antara C-Haskell, Java / C-Haskell dan mengembangkan program Haskell untuk Android yang dapat Anda distribusikan / jual secara resmi di market store.
L01man: Saya mengerti bahwa tujuannya adalah untuk membuat pengikatan untuk Android API. Tapi ... apakah bagian ke-4 mengatakan kita tidak bisa membuat .apk dengan Haskell?
.apk hanyalah format file paket aplikasi dan dibangun dengan alat-alat yang datang dengan Android SDK (bukan NDK), ini sangat sedikit untuk membangun binari itu sendiri. Paket Android dapat berisi pustaka bersama asli, ini akan seperti apa program Haskell Anda dan pustaka bersama / statis asli dihasilkan melalui Android NDK.
Ada https://github.com/neurocyte/android-haskell-activity mendemonstrasikan
Haskell
kode berjalan.sumber
Bahasa yang baru-baru ini menjadi perhatian saya adalah Eta .
Compiler Eta adalah fork dari GHC 7.10 yang memiliki backend JVM. Dimungkinkan untuk menggunakan file JAR yang dihasilkan untuk menulis aplikasi Android dan bahkan menggunakan Antarmuka Fungsi Asingnya untuk memanggil perpustakaan Android Java asli.
Brian McKenna telah menulis posting blog tentang cara mengkonfigurasi proyek Android Studio untuk menggunakan perpustakaan Eta .
sumber
Saya pernah menemukan utas Reddit yang sama, tetapi sudah lama, dan komentar ditutup. Saya mengirim pesan ke OP, tetapi tidak yakin apakah pesan itu sampai ke penerima. Saran saya di sini (dapat bekerja untuk Android yang lebih tua di mana kegiatan asli tidak dimungkinkan).
Saya (dikembangkan di Haskell beberapa waktu lalu, tetapi saat ini beralih ke Smalltalk) saat ini saya sedang mengembangkan port Squeak VM ke Android. Cara saya melakukan ini mirip dengan apa yang mungkin ditangani dalam proyek haskell-on-android: segumpal kode C yang perlu dipanggil dari bagian aplikasi Java (pada dasarnya semua yang dapat dilakukan di Android adalah untuk menangani berbagai acara; aplikasi tidak dapat melakukan polling untuk acara itu sendiri dan tidak memiliki loop acara). Dalam kasus saya, kode dihasilkan oleh alat bangunan Squeak VM, dalam kasus haskell di android ini akan menjadi output dari GHC JHC atau apa pun ujung depan yang digunakan. Repo ini mungkin layak dilihat:
http://gitorious.org/~golubovsky/cogvm/dmg-blessed/trees/master/platforms/android/project
Di bawah "src" ada kode Java yang menyediakan untuk intersepsi acara pengguna dan mengirimkannya ke kode asli (lihat kelas CogView). Kode C dari VM itu sendiri tidak sepenuhnya ada di sana (lihat squeakvm.org, cabang Cog untuk itu), tetapi orang mungkin mendapatkan idenya. Seseorang juga dapat melihat di bawah http://gitorious.org/~golubovsky/cogvm/dmg-blessed/trees/master/platforms/android/vm yang merupakan C frontend ke penerjemah (termasuk penanganan acara pengguna, ketepatan waktu pengguna, dll. )
Semoga ini membantu.
Dmitry
sumber
Ada https://github.com/conscell/hugs-android port penerjemah HUGS Haskell ke Android.
sumber
Saya pikir jawaban umum harus berasal dari sumber -> transformasi sumber, karena memuat objek yang dikompilasi khusus tampaknya menjadi sedikit kludge (melibatkan ghc-> c dan langkah c-> java dalam jawaban di atas). Pertanyaan ini dengan demikian berada di bawah judul Haskell pada JVM, yang telah dicoba (dengan satu langkah sebagai representasi perantara Java) dan dibahas panjang lebar. Anda dapat menggunakan frege jika pustaka yang Anda perlukan kompilasi di sana. Satu-satunya langkah yang tersisa adalah permulaan API kerangka Android yang diterjemahkan ke dalam tindakan IO () dan mungkin pembungkus untuk membangun manifes xml dan apk.
sumber