2012-07-05 8 views

Respuesta

-1

Si quieres aplicaciones sin headless, mi consejo sería usar cgo para la GUI. Eso suena contrario a la intuición, pero si el NDK es compatible con las bibliotecas guiadas de Android C, probablemente sea más fácil escribir la GUI usando esas llamadas. Por supuesto, no tiene que escribir toda la lógica en C. Simplemente puede cgo wrappers para cada una de las llamadas de GUI y luego escribir la GUI en go, excepto que cada llamada gui se traduciría a través de cgo.

+0

Go/cgo/Java no puede funcionar de esta manera. –

+0

No sugiero el uso de Java. NDK admite compatibilidad nativa con C en dispositivos Android: no hay Java involucrado. Mi punto es que si pudieras escribir los bits de la interfaz del sistema Android en C usando NDK, podrías vincular usando cgo – joshlf

+0

Mi comprensión del ciclo de vida de la aplicación es que el proceso para tu aplicación es una copia en horquilla del dalvik zygote, y eso Una vez que su uid/gid se establece correctamente, hay una transferencia de control de Android a su aplicación, a través de las convenciones de llamadas de Java. Si lo primero que desea hacer es entregar el control al código C compilado por el NDK, está bien. Pero el tiempo de ejecución de Go quiere iniciarse en ausencia de Dalvik que ya se está ejecutando en el espacio de direcciones. –

1

No, no es posible en este momento. Los programas Go y C pueden interoperar a través de cgo. pero en ese caso, el programa Go debe iniciar e inicializar su tiempo de ejecución antes de pasar el control a la parte del programa basada en C.

Al usar el NDK en Android, su código C es llamado por la máquina virtual Dalvik a través de dlopen. Por lo tanto, el tiempo de ejecución Go no tendría la posibilidad de inicializarse.

+0

¿No se pudo hacer una llamada desde el código C para Ir a hacer la inicialización? – kristianp

+0

Sí, en principio ... como "los cerdos pueden volar si tienen suficiente energía cinética". Pero la forma en que Go y cgo funcionan hoy, no. Un límite fundamental de la implementación actual es que el encabezado ELF del ejecutable debe ser realizado por el compilador Go y debe apuntar al código de inicio de Go. Una vez hecho esto, Go puede asignar una pila estilo C y la transición dentro y fuera de ella cuando llama al código C. –

+0

Buena analogía :) – kristianp

Cuestiones relacionadas