| // Copyright 2014 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| /* |
| Package app lets you write Apps for Android (and eventually, iOS). |
| |
| There are two ways to use Go in an Android App. The first is as a |
| library called from Java, the second is to use a restricted set of |
| features but work entirely in Go. |
| |
| Shared Library |
| |
| A Go program can be compiled for Android as a shared library. JNI |
| methods can be implemented via cgo, or generated automatically with |
| gobind: http://golang.org/x/mobile/cmd/gobind |
| |
| The library must include a package main and a main function that does |
| not return until the process exits. Libraries can be cross-compiled |
| using the Android NDK and the Go tool: |
| |
| GOOS=android GOARCH=arm GOARM=7 CGO_ENABLED=1 \ |
| go build -ldflags="-shared" . |
| |
| See http://golang.org/x/mobile/example/libhello for an example of |
| calling into a Go shared library from a Java Android app. |
| |
| Native App |
| |
| An app can be written entirely in Go. This results in a significantly |
| simpler programming environment (and eventually, portability to iOS), |
| however only a very restricted set of Android APIs are available. |
| |
| The provided interfaces are focused on games. It is expected that the |
| app will draw to the entire screen (via OpenGL, see the go.mobile/gl |
| package), and that none of the platform's screen management |
| infrastructure is exposed. On Android, this means a native app is |
| equivalent to a single Activity (in particular a NativeActivity) and |
| on iOS, a single UIWindow. Touch events will be accessible via this |
| package. When Android support is out of preview, all APIs supported by |
| the Android NDK will be exposed via a Go package. |
| |
| See http://golang.org/x/mobile/example/sprite for an example app. |
| |
| Lifecycle in Native Apps |
| |
| App execution begins in platform-specific code. Early on in the app's |
| life, the Go runtime is initialized and the Go main function is called. |
| (For Android, this is in ANativeActivity_onCreate, for iOS, |
| application:willFinishLaunchingWithOptions.) |
| |
| An app is expected to call the Run function in its main. When the main |
| function exits, the app exits. |
| |
| package main |
| |
| import ( |
| "log" |
| |
| "golang.org/x/mobile/app" |
| ) |
| |
| func main() { |
| app.Run(app.Callbacks{ |
| Draw: draw, |
| }) |
| } |
| |
| func draw() { |
| log.Print("In draw loop, can call OpenGL.") |
| } |
| |
| */ |
| package app // import "golang.org/x/mobile/app" |