Go on Android

GothamGo
15 Nov 2014

David Crawshaw
Google
@davidcrawshaw

* Video

This talk was presented at GothamGo in New York City, November 2014.

.link http://vimeo.com/115307069 Watch the talk on Vimeo

* Go on Mobile

The goal is to bring Go to Android and iOS,
starting with Android.

This is new territory for Go and a well-established
ecosystem. A lot of experimentation is necessary.

* Today

* Go 1.4 Status

The coming 1.4 release can build binaries for Android OS.

With the `mobile` subrepository and the Android SDK/NDK, it can:

- Build `.so` files for linking into Android Apps
- Build apps based on NativeActivity ("All Go")

* What's there

- Go standard library tests running on Android OS

- JDK / runtime hooks

- The `gobind` tool, for calling Go from Java: [[http://golang.org/s/gobind]]

Packages for cross-device apps:

- [[https://godoc.org/golang.org/x/mobile/app][App control]]

- [[https://godoc.org/golang.org/x/mobile/gl][OpenGL ES 2]]

- [[https://godoc.org/golang.org/x/mobile/event][Touch events]]

- [[https://godoc.org/golang.org/x/mobile/geom][Screen geometry]]

* What's missing — a good build system

There's more than one way to build an Android App.

None of them

- fit well with what go programmers expect (the go tool)
- work for cross-device development

We are working on this for Go 1.5.

Until it is done, using Go on Android requires some bravery.

* What it's for — the two kinds of apps

*SDK* *Apps*

Write your Android UI in Java.
Write your iOS UI in Objective-C/Swift.
Write your logic in Go.

Share the Go using interfaces generated by `gobind`.

*NDK* *Apps*

Games.

Use OpenGL or the coming 2D [[http://godoc.org/golang.org/x/mobile/sprite][sprite]] package to write to the screen.
Everything is written in Go.

* Hello, World!

Portable APIs, just Go. This is a complete app:

.play gothamgo-android/red.go

* Write anywhere

Developing with portable APIs means starting from very little.
It is a lot of work to get going and limits access to device features.

But it also frees us from device-specific build systems.

The app package includes Mac/X11 shims for starting as normal programs.
We can write Apps anywhere we can write Go.

(Windows coming soon.)

* Touch events

.play gothamgo-android/touch.go

* Package sprite

We are building a 2D rendering and compositing package.

It renders a scene graph. A scene starts with a root
`*sprite.Node`, which can have child nodes.

Each node may have an affine transform and texture.

Rendering is done in a depth-first traversal of the scene,
with transforms applied relative to the parent.

Composition is done in OpenGL.

* Sprite — affine transform

.image gothamgo-android/sprite_affine.svg

* Sprite — depth first traversal, applying parent's transforms

.image gothamgo-android/sprite_subtex.svg

* Sprite Demo

* Sprite — what's next

- Rasterizer, CPU-based for now

- Text, based on freetype-go

- Simple UI elements, focused on game menu needs

- Debugging tools

- Performance

* Go 1.5 Plans (July 2015)

- A build system

- OpenAL bindings for sound

- Very basic UI building blocks for game-like apps

- iOS experimental support
