È possibile utilizzare Vai per costruire giochi Android? Non sono sposato alle tecnologie menzionate nella riga dell'oggetto. So che some people hanno creato alcuni programmi Android in Go, ma potrebbero essere stati senza testa.È possibile creare giochi Android in Go utilizzando NDK con cgo e/o SWIG o simili?
risposta
Se si desidera app non headless, il mio consiglio sarebbe di utilizzare cgo per la GUI. Ciò sembra controintuitivo, ma se l'NDK supporta le librerie di GUI Android C, probabilmente sarebbe più semplice scrivere la GUI usando quelle chiamate. Naturalmente, non devi scrivere tutta la logica in C. Potresti semplicemente cgo wrapper per ciascuna delle chiamate della GUI e poi scrivere la GUI in go, eccetto che ogni chiamata GUI sarebbe tradotta tramite cgo.
No, non è possibile al momento. I programmi Go e C possono interagire tramite cgo. ma in questo caso, il programma Go deve avviare e inizializzare il suo runtime prima di passare il controllo alla parte del programma basata su C.
Quando si utilizza NDK in Android, il proprio codice C viene chiamato dalla macchina virtuale Dalvik tramite dlopen. Quindi il runtime di Go non avrebbe la possibilità di inizializzarsi.
Non è possibile effettuare una chiamata dal codice C a Vai all'inizializzazione? – kristianp
Sì, in linea di principio ... come "i maiali possono volare se hanno abbastanza energia cinetica". Ma il modo in cui Go e cgo funzionano oggi, no. Un limite fondamentale dell'attuale implementazione è che l'intestazione ELF dell'eseguibile deve essere eseguita dal compilatore Go e deve puntare al codice init di Go. Una volta fatto, quindi Go può allocare uno stack in stile C e la transizione su e fuori di esso quando si chiama in codice C. –
Bella analogia :) – kristianp
Go/cgo/Java non possono interoperare in questo modo. –
Non sto suggerendo l'uso di Java. NDK supporta il supporto C nativo sui dispositivi Android - non è coinvolto Java. Il mio punto è che se potessi scrivere i bit dell'interfaccia di sistema di Android in C usando NDK, potresti collegare usando cgo – joshlf
La mia comprensione del ciclo di vita dell'applicazione è che il processo per la tua app è una copia biforcuta di dalvik zygote, e che una volta che il tuo uid/gid è impostato correttamente, c'è un trasferimento di controllo da Android alla tua app, attraverso le convenzioni di chiamata Java. Se la prima cosa che vuoi fare è passare il controllo sul codice C compilato dall'NDK, bene. Ma il runtime di Go vuole inizializzarsi in assenza di Dalvik già in esecuzione nello spazio degli indirizzi. –