Cách bạn thực hiện là trước tiên hãy có một trình biên dịch Haskell có thể nhắm mục tiêu C với NDK của Android đi kèm với cổng GCC cho các kiến trúc ARM. JHC có thể làm điều này một cách tầm thường với một tệp kiểu inf rất nhỏ mô tả nền tảng (kích thước từ, trình biên dịch c, v.v.) Tôi đã thực hiện điều này với bộ công cụ phát triển homebrew của Wii và nó khá dễ dàng. Tuy nhiên jhc vẫn có một số vấn đề ổn định với mã phức tạp như sử dụng ngăn xếp biến áp đơn nguyên với IO nhưng jhc đã được cải thiện rất nhiều trong 6 tháng qua. Chỉ có một người làm việc trên JHC, tôi chỉ ước có nhiều người có thể giúp anh ta.
Tùy chọn khác là xây dựng một cổng GHC "chưa đăng ký" nhắm mục tiêu vào ndk gcc, đây là quá trình liên quan nhiều hơn vì GHC không phải là trình biên dịch chéo thực sự vào lúc này và bạn cần hiểu hệ thống xây dựng những phần bạn cần thay đổi. Một tùy chọn khác là NHC có thể biên dịch chéo thành C, như GHC bạn cần xây dựng nhc nhắm mục tiêu trình biên dịch C, NHC không có nhiều tiện ích mở rộng Haskell như GHC.
Khi bạn có trình biên dịch Haskell nhắm mục tiêu NDK GCC, bạn sẽ cần phải viết các ràng buộc vào khung mã keo dán NDK JNI của Android (được thêm từ Android 2.3) hoặc bạn phải viết mã keo JNI giữa Java-C-Haskell, tùy chọn trước đây là dễ dàng hơn giải pháp và nếu tôi nhớ chính xác có thể thực sự tương thích ngược với các phiên bản Android trước đây dưới 2.3.
Khi bạn đã có thứ này, bạn phải xây dựng mã Haskell làm thư viện dùng chung hoặc thư viện tĩnh được liên kết với mã keo java NDK (bản thân nó là thư viện dùng chung). Theo như tôi biết, bạn không thể chính thức chạy các tệp thực thi gốc trên Android. Bạn có thể có thể làm điều đó với một điện thoại đã được root, vì vậy tôi cho rằng điều này có nghĩa là bạn không thể phân phối các tệp thực thi gốc trên cửa hàng ứng dụng ngay cả khi cổng gcc NDK có thể tạo ra các tệp thực thi gốc tốt. Điều này cũng có thể giết chết tùy chọn sử dụng LLVM trừ khi bạn có thể khiến NDK JNI hoạt động với LLVM.
Rào cản lớn nhất không phải là quá nhiều để có được trình biên dịch Haskell cho Android (vẫn còn là một trở ngại lớn) vấn đề lớn nhất là ai đó cần phải viết API ràng buộc cho các thư viện NDK, đây là một nhiệm vụ lớn và tình hình còn tồi tệ hơn nếu bạn cần phải viết mã giao diện người dùng Android vì không có API NDK cho phần này của SDK Android. Nếu bạn muốn làm mã UI Android trong Haskell, ai đó sẽ phải viết các liên kết Haskell với Java thông qua JNI / C. Trừ khi có một quy trình tự động hơn để viết thư viện ràng buộc (tôi biết có một số, chúng chỉ không đủ tự động cho tôi) thì khả năng một số người làm việc đó là khá thấp.
L01man: Có hướng dẫn về cách làm điều này không? Đối với phần đầu tiên, tôi hiểu rằng tôi phải tải xuống JHC. Tôi phải viết gì trong tập tin inf và làm thế nào để sử dụng nó?
Xin lưu ý trước khi tôi trả lời câu hỏi này. Tôi đã không sử dụng jhc trong một thời gian khá lâu kể từ khi tôi viết bài này và các phiên bản mới hơn đã được phát hành kể từ đó vì vậy tôi không biết jhc ổn định như thế nào khi nói đến việc tạo mã các chương trình Haskell phức tạp hơn. Đây là một cảnh báo cho bất cứ ai trước khi bạn xem xét thực hiện một chương trình Haskell lớn với JHC, bạn nên thực hiện một số thử nghiệm nhỏ trước khi bạn hoàn thành.
jhc có hướng dẫn sử dụng http://repetae.net/computer/jhc/manual.html và một phần về thiết lập biên dịch chéo và tệp .ini với các tùy chọn: http://repetae.net/computer/jhc/manual .html # chéo .
L01man: Phần thứ hai là một thay thế cho phần đầu tiên. Tôi không biết làm thế nào để làm những gì bạn nói trong phần ba.
Trước khi bắt đầu, bạn nên có một số kiến thức về C và cảm thấy thoải mái khi sử dụng giao diện chức năng nước ngoài Haskell (FFI) và các công cụ như hs2c. Bạn cũng nên làm quen với việc sử dụng Android NDK và xây dựng .apk với các thư viện dùng chung. Bạn sẽ cần biết những điều này để giao diện giữa C-Haskell, Java / C-Haskell và phát triển các chương trình Haskell cho Android để bạn có thể phân phối / bán chính thức trên cửa hàng thị trường.
L01man: Tôi hiểu rằng mục tiêu của nó là tạo ra một ràng buộc cho API Android. Nhưng ... phần 4 có nói rằng chúng ta không thể tạo .apk bằng Haskell không?
.apk chỉ là một định dạng tệp gói ứng dụng và được xây dựng với các công cụ đi kèm với SDK Android (không phải NDK), điều này có rất ít để tự xây dựng các nhị phân. Các gói Android có thể chứa các thư viện dùng chung, đây là chương trình Haskell của bạn và các thư viện chia sẻ / tĩnh được tạo thông qua NDK của Android.