이를 수행하는 방법은 먼저 ARM 아키텍처 용 GCC 포트와 함께 제공되는 Android NDK로 C를 대상으로 할 수있는 Haskell 컴파일러를 얻는 것입니다. JHC는 Wii homebrew dev 키 트로이 작업을 수행 한 플랫폼 (단어 크기, c 컴파일러 등)을 설명하는 매우 작은 inf 스타일 파일로 간단 하게이 작업을 수행 할 수 있으며 매우 쉽습니다. 그러나 jhc는 여전히 IO와 함께 모나드 변압기 스택을 사용하는 것과 같은 복잡한 코드의 안정성 문제가 있지만 지난 6 개월 동안 jhc가 많이 개선되었습니다. JHC에서 일하는 사람은 한 명뿐입니다. 더 많은 사람들이 그를 도울 수 있기를 바랍니다.
다른 옵션은 ndk gcc를 대상으로하는 "등록되지 않은"GHC 포트를 구축하는 것입니다. 이는 GHC가 현재 진정한 크로스 컴파일러가 아니기 때문에 필요한 부분이 무엇인지 빌드 시스템을 이해해야하기 때문에 훨씬 더 복잡한 프로세스입니다. 변화. 또 다른 옵션은 C로 크로스 컴파일 할 수있는 NHC입니다 .GHC와 같이 C 컴파일러를 대상으로 nhc를 빌드해야하며 NHC에는 GHC와 같은 많은 Haskell 확장이 없습니다.
NDK GCC를 대상으로하는 Haskell 컴파일러가 있으면 Android NDK JNI 글루 코드 프레임 워크 (Android 2.3 이후에 추가됨)에 바인딩을 작성하거나 Java-C-Haskell간에 JNI 글루 코드를 작성해야합니다. 이전 옵션이 더 쉽습니다. 솔루션을 기억하고 올바르게 기억한다면 2.3 이전 버전의 Android와 호환됩니다.
일단 이것을 가지고 나면 Haskell 코드를 공유 라이브러리 또는 NDK Java 글루 코드 (그 자체가 공유 라이브러리 임)에 링크되는 정적 라이브러리로 빌드해야합니다. 내가 아는 한 공식적으로 안드로이드에서 네이티브 실행 파일을 실행할 수는 없습니다. 아마도 루팅 된 전화로 할 수 있으므로 NDK gcc 포트가 기본 실행 파일을 올바르게 생성 할 수있는 경우에도 앱 스토어에서 기본 실행 파일을 배포 할 수 없다고 가정합니다. 또한 LLK로 NDK JNI를 사용할 수 없다면 LLVM을 사용하기위한 옵션이 종료 될 수 있습니다.
가장 큰 장애물은 안드로이드를위한 Haskell 컴파일러를 얻는 데 그다지 중요하지 않습니다 (아직 큰 장애물 임) 가장 큰 문제는 누군가가 NDK 라이브러리에 대한 바인딩 API를 작성해야한다는 것입니다. 안드로이드 SDK 의이 부분에 대한 NDK API가 없기 때문에 안드로이드 UI 코드를 작성해야합니다. Haskell에서 안드로이드 UI 코드를 수행하려면 누군가 JNI / C를 통해 Java에 Haskell 바인딩을 작성해야합니다. 바인딩 라이브러리를 작성하는보다 자동화 된 프로세스가 없다면 (일부는 충분하지만 자동화되지는 않습니다) 어떤 사람이 그것을 할 가능성은 매우 낮습니다.
L01man :이 작업을 수행하는 방법에 대한 자습서가 있습니까? 첫 번째 부분에서는 JHC를 다운로드해야한다는 것을 알고 있습니다. inf 파일에 무엇을 작성하고 어떻게 사용합니까?
이 질문에 대답하기 전에 원래 이것을 작성 했으므로 jhc를 꽤 오랫동안 사용하지 않았으며 최신 버전이 릴리스되었으므로 더 복잡한 Haskell 프로그램의 코드 생성과 관련하여 jhc가 현재 얼마나 안정적인지 알 수 없습니다. 이것은 JHC로 대규모 Haskell 프로그램을 만들기 전에 모든 사람에게 경고입니다.
jhc에는 http://repetae.net/computer/jhc/manual.html 매뉴얼 과 옵션이 포함 된 크로스 컴파일 및 .ini 파일 설정 섹션이 있습니다. http://repetae.net/computer/jhc/manual .html 중에서 #의 crosscompilation .
L01man : 두 번째 부분은 첫 번째 부분의 대안입니다. 세 번째로 말한 것을 어떻게해야할지 모르겠습니다.
시작하기 전에 C에 대한 지식이 있어야하며 Haskell 외부 함수 인터페이스 (FFI) 및 hs2c와 같은 도구를 사용하는 데 익숙해야합니다. 또한 Android NDK 사용 및 공유 라이브러리로 .apk 작성에 익숙해야합니다. C-Haskell, Java / C-Haskell간에 인터페이스하고 마켓 스토어에 공식적으로 배포 / 판매 할 수있는 Android 용 Haskell 프로그램을 개발하려면 이러한 정보를 알아야합니다.
L01man : Android API에 대한 바인딩을 만드는 것이 목표라는 것을 알고 있습니다. 하지만 ... 4 번째 부분은 Haskell로 .apk를 만들 수 없다고합니까?
.apk는 앱 패키지 파일 형식 일 뿐이며 NDK가 아닌 Android SDK와 함께 제공되는 도구로 만들어 졌으므로 바이너리 자체를 빌드하는 작업은 거의 없습니다. 안드로이드 패키지는 네이티브 공유 라이브러리를 포함 할 수 있으며, 이것은 Haskell 프로그램이 될 것이고 네이티브 공유 / 정적 라이브러리는 안드로이드 NDK를 통해 생성됩니다.