วิธีที่คุณทำได้คือการรับคอมไพเลอร์ Haskell ซึ่งสามารถกำหนดเป้าหมาย C ด้วย android NDK ซึ่งมาพร้อมกับพอร์ต GCC สำหรับสถาปัตยกรรม ARM JHC สามารถทำสิ่งนี้ได้เล็กน้อยด้วยไฟล์สไตล์ inf ขนาดเล็กมากซึ่งอธิบายแพลตฟอร์ม (ขนาดคำ, คอมไพเลอร์, ฯลฯ ) ฉันทำสิ่งนี้กับชุด homebrew dev ของ Wii และมันค่อนข้างง่าย อย่างไรก็ตาม jhc ยังคงมีปัญหาด้านความเสถียรกับรหัสที่ซับซ้อนเช่นการใช้ monad transformer stack กับ IO แต่ jhc ได้รับการปรับปรุงอย่างมากในช่วง 6 เดือนที่ผ่านมา มีเพียงคนเดียวที่ทำงานกับ JHC ฉันแค่อยากให้คนอื่นช่วยเขาได้
ตัวเลือกอื่นคือการสร้างพอร์ต "ไม่ได้ลงทะเบียน" ของ GHC ที่กำหนดเป้าหมายเป็น ndk gcc ซึ่งเป็นกระบวนการที่เกี่ยวข้องมากขึ้นเนื่องจาก GHC ไม่ใช่ตัวรวบรวมข้ามที่แท้จริงในขณะนี้และคุณจำเป็นต้องเข้าใจระบบการสร้างสิ่งที่คุณต้องการ เปลี่ยนแปลง ตัวเลือกอื่นคือ NHC ซึ่งสามารถคอมไพล์ข้ามไปที่ C เช่น GHC คุณต้องสร้าง nhc ที่กำหนดเป้าหมายเป็นคอมไพเลอร์ C NHC ไม่มีส่วนขยาย Haskell จำนวนมากเช่น GHC
เมื่อคุณมีผู้รวบรวม Haskell ที่กำหนดเป้าหมายไว้ที่ NDK GCC คุณจะต้องเขียนการผูกเข้ากับกรอบรหัสกาว NDK JNI ของ Android (เพิ่มตั้งแต่ android 2.3) หรือคุณต้องเขียนรหัสกาว JNI ระหว่าง Java-C-Haskell ตัวเลือกก่อนหน้านี้จะง่ายกว่า วิธีแก้ปัญหาและถ้าฉันจำได้อย่างถูกต้องอาจเข้ากันได้กับ Android รุ่นก่อนหน้านี้ด้านล่าง 2.3
เมื่อคุณมีสิ่งนี้แล้วคุณจะต้องสร้างรหัส Haskell เป็น shared library หรือ static library ที่เชื่อมโยงกับรหัสกาว NDK ของจาวา (ซึ่งตัวมันเองเป็น shared library) เท่าที่ฉันรู้ว่าคุณไม่สามารถเรียกใช้ไฟล์ปฏิบัติการดั้งเดิมบน Android ได้ คุณอาจจะทำได้ด้วยโทรศัพท์รูทดังนั้นฉันจึงคิดว่านี่หมายความว่าคุณไม่สามารถแจกจ่ายไฟล์ปฏิบัติการดั้งเดิมบนแอพสโตร์ได้แม้ว่าพอร์ต NDK gcc สามารถสร้างไฟล์ปฏิบัติการดั้งเดิมได้ นอกจากนี้ยังอาจฆ่าตัวเลือกสำหรับการใช้ LLVM เว้นแต่ว่าคุณสามารถทำให้ NDK JNI ทำงานกับ LLVM ได้
อุปสรรค์ที่ใหญ่ที่สุดนั้นไม่ค่อยได้รับคอมไพเลอร์ Haskell สำหรับ Android (ซึ่งยังคงเป็นอุปสรรค์ใหญ่) ปัญหาที่ใหญ่ที่สุดคือบางคนต้องการเขียน API ที่มีผลผูกพันสำหรับห้องสมุด NDK ซึ่งเป็นงานที่ใหญ่และสถานการณ์เลวร้ายกว่าถ้าคุณ จำเป็นต้องเขียนรหัส UI ของ android เนื่องจากไม่มี NDK API สำหรับส่วนนี้ของ android SDK หากคุณต้องการทำรหัส Android UI ใน Haskell ใครบางคนจะต้องเขียนการเชื่อมโยง Haskell ไปยัง Java ผ่าน JNI / C ถ้าไม่มีกระบวนการอัตโนมัติในการเขียนไลบรารีที่มีผลผูกพัน (ฉันรู้ว่ามีบางอย่างมันก็ไม่อัตโนมัติพอสำหรับฉัน) จากนั้นโอกาสที่บางคนทำมันจะค่อนข้างต่ำ
L01man: มีการสอนเกี่ยวกับวิธีการทำเช่นนี้หรือไม่? สำหรับส่วนแรกฉันเข้าใจว่าฉันต้องดาวน์โหลด JHC ฉันต้องเขียนอะไรในไฟล์ inf และใช้อย่างไร
โปรดทราบก่อนที่ฉันจะตอบคำถามนี้ฉันไม่ได้ใช้ jhc มานานแล้วตั้งแต่ฉันเขียนสิ่งนี้และรุ่นที่ใหม่กว่านั้นออกวางจำหน่ายแล้วดังนั้นฉันจึงไม่ทราบว่า jhc ที่เสถียรในปัจจุบันคือเมื่อมาถึงการสร้างรหัสของโปรแกรม Haskell ที่ซับซ้อนมากขึ้น นี่คือคำเตือนสำหรับทุกคนก่อนที่คุณจะพิจารณาสร้างโปรแกรม Haskell ขนาดใหญ่ด้วย JHC คุณควรทำแบบทดสอบเล็ก ๆ ก่อนที่คุณจะเริ่มต้น
jhc มีคู่มือhttp://repetae.net/computer/jhc/manual.html แบบแมนนวลและส่วนในการตั้งค่าการคอมไพล์ข้ามและไฟล์. ini พร้อมตัวเลือก: http://repetae.net/computer/jhc/manual .html
L01man: ส่วนที่สองเป็นทางเลือกแทนส่วนแรก ฉันไม่รู้จะทำสิ่งที่คุณพูดในสาม
ก่อนที่คุณจะเริ่มคุณควรมีความรู้เกี่ยวกับ C และคุ้นเคยกับการใช้ Haskell foreign function interface (FFI) และเครื่องมือต่าง ๆ เช่น hs2c คุณควรทำความคุ้นเคยกับการใช้ Android NDK และการสร้าง. apk กับไลบรารีที่แชร์ คุณจะต้องรู้สิ่งเหล่านี้ในการเชื่อมต่อระหว่าง C-Haskell, Java / C-Haskell และพัฒนาโปรแกรม Haskell สำหรับ Android ที่คุณสามารถแจกจ่าย / ขายอย่างเป็นทางการในตลาดร้านค้า
L01man: ฉันเข้าใจว่าเป้าหมายคือการสร้างการเชื่อมโยงสำหรับ Android API แต่ ... ส่วนที่ 4 บอกว่าเราไม่สามารถสร้าง. apk กับ Haskell ได้หรือไม่
.apk เป็นเพียงรูปแบบไฟล์แพคเกจแอปและสร้างขึ้นด้วยเครื่องมือที่มาพร้อมกับ Android SDK (ไม่ใช่ NDK) สิ่งนี้มีน้อยมากที่จะสร้างไบนารีเอง แพคเกจ Android สามารถมีไลบรารี่ที่แชร์กันภายในโปรแกรม Haskell ของคุณจะเป็นอย่างไรและไลบรารี่แบบแชร์ / แบบคงที่จะถูกสร้างขึ้นผ่าน Android NDK