2012-07-05 8 views

Odpowiedz

-1

Jeśli chcesz korzystać z aplikacji bezgłowych, moja rada będzie polegać na używaniu cgo dla GUI. Brzmi to sprzecznie z intuicją, ale jeśli NDK obsługuje biblioteki GU z Androidem, najprawdopodobniej najłatwiej byłoby napisać GUI za pomocą tych wywołań. Oczywiście, nie musisz pisać całej logiki w C. Możesz po prostu cgo wrappery dla każdego z wywołań GUI, a następnie pisać GUI w go, z tym wyjątkiem, że każde wywołanie gui będzie tłumaczone przez cgo.

+0

Go/cgo/Java nie może współpracować w ten sposób. –

+0

Nie sugeruję używania Java. NDK obsługuje natywną obsługę C na urządzeniach z Androidem - nie ma w tym udziału Java. Chodzi mi o to, że gdybyś mógł napisać bity systemu Android w C używając NDK, mógłbyś połączyć się za pomocą cgo – joshlf

+0

Moje zrozumienie cyklu życia aplikacji jest takie, że proces dla twojej aplikacji jest rozwidloną kopią zygoty dalvik, i że po ustawieniu prawidłowego uid/gid następuje transfer kontroli z systemu Android do aplikacji za pośrednictwem konwencji wywoływania języka Java. Jeśli pierwszą rzeczą, którą chcesz zrobić, jest przekazanie kontroli do kodu C skompilowanego przez NDK, dobrze. Jednak środowisko uruchomieniowe Go'a chce się zainicjować w przypadku braku Dalvika już działającego w przestrzeni adresowej. –

1

Nie, obecnie nie jest to możliwe. Programy Go i C mogą współdziałać poprzez cgo. ale w takim przypadku program Go musi uruchomić i zainicjować swoje środowisko wykonawcze przed przekazaniem sterowania do części programu opartej na języku C.

Podczas korzystania z NDK w Androidzie Twój kod C jest wywoływany przez maszynę wirtualną Dalvik przez dlopen. Tak więc środowisko wykonawcze Go nie miałoby szansy na zainicjowanie samego siebie.

+0

Nie można wywołać z kodu C, aby przejść do inicjalizacji? – kristianp

+0

Tak, w zasadzie ... jak "świnie potrafią latać, jeśli mają wystarczająco dużo energii kinetycznej". Ale sposób, w jaki Go i cgo działają dzisiaj, nie. Podstawowym ograniczeniem aktualnej implementacji jest to, że nagłówek ELF pliku wykonywalnego musi być wykonany przez kompilator Go i musi wskazywać kod inicjujący Go. Gdy to zrobisz, to Go może przydzielić stos w stylu C i przełączać się między nim a wywołaniem podczas wywoływania kodu C. –

+0

Dobra analogia :) – kristianp