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: [[/s/gobind]]

Packages for cross-device apps:

- [[https://pkg.go.dev/golang.org/x/mobile/app][App control]]

- [[https://pkg.go.dev/golang.org/x/mobile/gl][OpenGL ES 2]]

- [[https://pkg.go.dev/golang.org/x/mobile/event][Touch events]]

- [[https://pkg.go.dev/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 [[https://pkg.go.dev/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
