2012-07-05 5 views

답변

-1

헤드리스 앱이 아닌 경우 GUI 용으로 cgo를 사용하는 것이 좋습니다. 반 직관적 인 것처럼 들리지만, NDK가 C android GUI 라이브러리를 지원한다면 아마도 이러한 호출을 사용하여 GUI를 작성하는 것이 가장 쉽습니다. 물론 모든 논리를 C로 작성하지 않아도됩니다. 각 GUI 호출에 대한 래퍼를 간단하게 처리 한 다음 GUI를 쓸 수 있습니다. 단, 각 GUI 호출은 cgo를 통해 변환됩니다.

+0

Go/cgo/Java는 이와 같이 상호 운용 할 수 없습니다. –

+0

자바 사용을 제안하지 않습니다. NDK는 안드로이드 장치에 대한 네이티브 C 지원을 지원합니다. Java와 관련이 없습니다. 내 요점은 NDK를 사용하여 C에서 안드로이드 시스템 인터페이스 비트를 작성할 수 있다면 cgo를 사용하여 연결할 수 있다는 것입니다. – joshlf

+0

응용 프로그램 수명주기에 대한 내 이해는 응용 프로그램 프로세스가 dalvik zygote의 분기 된 사본이라는 것입니다. uid/gid가 올바르게 설정되면 Java 호출 규칙을 통해 Android에서 앱으로 제어권이 이전됩니다. 가장 먼저해야 할 일은 NDK가 컴파일 한 C 코드를 제어권으로 넘기는 것입니다. 하지만 Go의 런타임은 Dalvik이 이미 주소 공간에서 실행 중이 아닌 경우 자체를 초기화하려고합니다. –

1

아니요, 지금은 불가능합니다. Go 및 C 프로그램은 cgo를 통해 상호 운용 될 수 있습니다. 그러나이 경우 Go 프로그램은 프로그램의 C 기반 부분에 제어를 전달하기 전에 런타임을 시작하고 초기화해야합니다.

Android에서 NDK를 사용하면 C 코드가 dlopen을 통해 Dalvik 가상 시스템에 의해 호출됩니다. 따라서 Go 런타임은 초기화 할 기회가 없습니다.

+0

C 코드에서 Go to do initialisation을 호출 할 수 없습니까? – kristianp

+0

예, 원칙적으로 "돼지는 운동 에너지가 충분하면 날 수 있습니다." 그러나 오늘가는 방법과 cgo는 작동합니다. 현재 구현의 근본적인 한계는 실행 파일의 ELF 헤더가 Go 컴파일러에 의해 만들어 져야하고 Go의 초기화 코드를 가리켜 야한다는 것입니다. 일단 끝나면 Go는 C 코드를 호출 할 때 C 스타일 스택과 전환을 할당 할 수 있습니다. –

+0

멋진 비유 :) – kristianp