| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // 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 portable all-Go apps for Android and iOS.
- There are typically two ways to use Go on Android and iOS. The first
- is to write a Go library and use `gomobile bind` to generate language
- bindings for Java and Objective-C. Building a library does not
- require the app package. The `gomobile bind` command produces output
- that you can include in an Android Studio or Xcode project. For more
- on language bindings, see https://golang.org/x/mobile/cmd/gobind.
- The second way is to write an app entirely in Go. The APIs are limited
- to those that are portable between both Android and iOS, in particular
- OpenGL, audio, and other Android NDK-like APIs. An all-Go app should
- use this app package to initialize the app, manage its lifecycle, and
- receive events.
- # Building apps
- Apps written entirely in Go have a main function, and can be built
- with `gomobile build`, which directly produces runnable output for
- Android and iOS.
- The gomobile tool can get installed with go get. For reference, see
- https://golang.org/x/mobile/cmd/gomobile.
- For detailed instructions and documentation, see
- https://golang.org/wiki/Mobile.
- # Event processing in Native Apps
- The Go runtime is initialized on Android when NativeActivity onCreate is
- called, and on iOS when the process starts. In both cases, Go init functions
- run before the app lifecycle has started.
- An app is expected to call the Main function in main.main. When the function
- exits, the app exits. Inside the func passed to Main, call Filter on every
- event received, and then switch on its type. Registered filters run when the
- event is received, not when it is sent, so that filters run in the same
- goroutine as other code that calls OpenGL.
- package main
- import (
- "log"
- "golang.org/x/mobile/app"
- "golang.org/x/mobile/event/lifecycle"
- "golang.org/x/mobile/event/paint"
- )
- func main() {
- app.Main(func(a app.App) {
- for e := range a.Events() {
- switch e := a.Filter(e).(type) {
- case lifecycle.Event:
- // ...
- case paint.Event:
- log.Print("Call OpenGL here.")
- a.Publish()
- }
- }
- })
- }
- An event is represented by the empty interface type interface{}. Any value can
- be an event. Commonly used types include Event types defined by the following
- packages:
- - golang.org/x/mobile/event/lifecycle
- - golang.org/x/mobile/event/mouse
- - golang.org/x/mobile/event/paint
- - golang.org/x/mobile/event/size
- - golang.org/x/mobile/event/touch
- For example, touch.Event is the type that represents touch events. Other
- packages may define their own events, and send them on an app's event channel.
- Other packages can also register event filters, e.g. to manage resources in
- response to lifecycle events. Such packages should call:
- app.RegisterFilter(etc)
- in an init function inside that package.
- */
- package app
|