Czy można używać Go do tworzenia gier na Androida? Nie jestem związany z technologiami wymienionymi w temacie. Wiem, że some people zbudowało niektóre programy na Androida w Go, ale mogły być bez głowy.Czy można tworzyć gry Android w Go za pomocą NDK z cgo i/lub SWIG lub podobnym?
Odpowiedz
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.
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.
Nie można wywołać z kodu C, aby przejść do inicjalizacji? – kristianp
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. –
Dobra analogia :) – kristianp
Go/cgo/Java nie może współpracować w ten sposób. –
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
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. –