2012-07-14 17 views
8

So che i programmi Go possono essere compilati per Android.API Android da Go

Come posso utilizzare API specifiche di Android, come ottenere le coordinate GPS o aprire un URL con il browser predefinito, all'interno di un programma Go?

risposta

9

Ho paura che sia quasi impossibile al momento. Nelle sessioni di I/O "Meet the Go Team", i ragazzi del team Go hanno dichiarato di non avere intenzione di aggiungere il supporto Android a Go.

Quello che abbiamo ora è solo un compilatore per l'architettura ARM. Sfortunatamente, questo è praticamente inutile per le vere applicazioni Android, anche se tali programmi possono essere lanciati dalla riga di comando sui dispositivi Android.

La maggior parte del framework Android è scritto in Java, quindi per interagire con esso il codice dovrebbe essere compilato su una libreria * .so, che verrà caricata e richiamata tramite l'interfaccia JNI. E non è possibile con l'attuale compilatore Go (gc, non sono sicuro di gccgo).

Forse sarete in grado di effettuare attacchi alle API di NDK Android con cgo, che permetterebbe di creare applicazioni in Go dal livello di API 9 (Android 2,3)

UPD: È ora possibile utilizzare JNI da Go e crea automaticamente collegamenti java con il pacchetto golang.org/x/mobile. In Go 1.4 è ancora sperimentale, ma ci sono piani per includerlo nella versione Go 1.5. Il pacchetto fornisce anche binding per GL, audio e input dell'utente (si spera che aggiungano anche il supporto iOS e che sia compatibile per Android e iOS un giorno). In ogni caso questo pacchetto è principalmente orientato alla scrittura di giochi in Go, piuttosto che usare Go come sostituto di Java su Android.

+1

Almeno il lavoro di rete è nativo?Voglio dire, i pacchetti 'net' o' net/http' Go funzionano "fuori dalla scatola" su un telefono Android? –

+0

@ SebastiánGrignoli Sì, ciò dovrebbe essere possibile, alcuni progetti esistenti lo fanno: https://github.com/huin/chunkymonkey/blob/master/docs/android-server.md – zserge

+2

Questa risposta è oudated. Il progetto https://github.com/golang/mobile include il supporto per le app Android in Go. –

1

Passaggio 1: creare una libreria GUI indipendente dalla piattaforma utilizzando Golang che utilizza OpenGL per disegnare e un evento intelligente e un sistema di associazione dei dati per scrivere le app. Qualsiasi software che utilizza OpenGL sarà più o meno portatile. In sostanza, riscrivi Kivy in Golang.

Passaggio 2: creare un wrapper basato su introspection/reflection per l'utilizzo di classi Java simili a PyJNIus (anche un progetto Kivy).

Fase 3: I lotti più duro lavoro, perché c'è molto da fare per raggiungere il livello di Kivy

Fase 4: Utile

+0

Molto sopra, quindi capisco la tua risposta come "no, al momento non è possibile". :) –

+0

Sì, non voglio essere un killer di atmosfera, ma ci vuole solo del tempo per il supporto del software per arrivarci. Mi piace molto l'idea di usare Golang anziché Java (o Python). Fino a quando Python non otterrà una specie di compilatore di inferenza di tipo per IF di LLVM o qualcosa del genere, preferirei non incorrere in una tale enorme penalità di velocità. – user823629

7

Date un'occhiata alla mia risposta a Android App from Go programming language. Il progetto goandroid consente di creare app Android in Go through the NDK.

(Disclaimer: io sono l'autore di goandroid)

Edit: Come accennato nei commenti, Go 1.5 aggiunge il supporto ufficiale per le applicazioni Android in puro Go o come un mix di Java e Go. Si prevede che iOS arriverà in tempo per la versione finale 1.5. Vedi https://github.com/golang/mobile per maggiori dettagli.

+1

goandroid è obsoleto, consultare https://github.com/golang/mobile per il supporto ufficiale. –

2

GO 1.4 doc dice: "Vai 1.4 in grado di costruire i binari per i processori ARM che eseguono il sistema operativo Android. Si può anche costruire una libreria .so che può essere caricato da un'applicazione Android utilizzando i pacchetti di supporto nella subrepository mobile"

L'opzione package app è disponibile nella libreria "golang.org/x/mobile/app" che consente di scrivere app per Android (ed eventualmente iOS).