Gomobile has up until now used stripped NDKs hosted by Google. This arrangement adds maintenance overhead and blocks the use of custom NDKs or custom API levels. Also, as noted in issue 16211, the stripped NDK is no longer tiny because Gomobile supports more platforms. This CL removed the code for generating and packaging stripped NDKs and adds support for using external NDKs to the gomobile tool. gomobile init will now use the NDK installed by the Android SDK manager, if present, or a user specified NDK if the -ndk flag is given. If no NDK was found or specified, Android initialization is skipped. gomobile will instruct the user to run init with a valid NDK if bind or build is invoked without Android initialization. gomobile init will also attempt to build OpenAL for Android if the -openal flag specifies a source directory. It needs cmake and, on Windows, nmake installed. If gomobile build is run on an app that requires golang.org/x/mobile/exp/audio/al and OpenAL wasn't built by init, the user is instructed to do so. Tested on Linux, macOS, Windows. Fixes golang/go#16211 Fixes golang/go#18522 Change-Id: Ia38f6e43e671a207dad562678c65225b426e7e3e Reviewed-on: https://go-review.googlesource.com/35173 Reviewed-by: David Crawshaw <crawshaw@golang.org>
216 lines
7.0 KiB
Go
216 lines
7.0 KiB
Go
// Copyright 2015 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.
|
|
|
|
// DO NOT EDIT. GENERATED BY 'gomobile help documentation doc.go'.
|
|
|
|
/*
|
|
Gomobile is a tool for building and running mobile apps written in Go.
|
|
|
|
To install:
|
|
|
|
$ go get golang.org/x/mobile/cmd/gomobile
|
|
$ gomobile init
|
|
|
|
At least Go 1.5 is required.
|
|
For detailed instructions, see https://golang.org/wiki/Mobile.
|
|
|
|
Usage:
|
|
|
|
gomobile command [arguments]
|
|
|
|
Commands:
|
|
|
|
bind build a library for Android and iOS
|
|
build compile android APK and iOS app
|
|
clean remove object files and cached gomobile files
|
|
init install android compiler toolchain
|
|
install compile android APK and install on device
|
|
version print version
|
|
|
|
Use 'gomobile help [command]' for more information about that command.
|
|
|
|
|
|
Build a library for Android and iOS
|
|
|
|
Usage:
|
|
|
|
gomobile bind [-target android|ios] [-o output] [build flags] [package]
|
|
|
|
Bind generates language bindings for the package named by the import
|
|
path, and compiles a library for the named target system.
|
|
|
|
The -target flag takes a target system name, either android (the
|
|
default) or ios.
|
|
|
|
For -target android, the bind command produces an AAR (Android ARchive)
|
|
file that archives the precompiled Java API stub classes, the compiled
|
|
shared libraries, and all asset files in the /assets subdirectory under
|
|
the package directory. The output is named '<package_name>.aar' by
|
|
default. This AAR file is commonly used for binary distribution of an
|
|
Android library project and most Android IDEs support AAR import. For
|
|
example, in Android Studio (1.2+), an AAR file can be imported using
|
|
the module import wizard (File > New > New Module > Import .JAR or
|
|
.AAR package), and setting it as a new dependency
|
|
(File > Project Structure > Dependencies). This requires 'javac'
|
|
(version 1.7+) and Android SDK (API level 15 or newer) to build the
|
|
library for Android. The environment variable ANDROID_HOME must be set
|
|
to the path to Android SDK. The generated Java class is in the java
|
|
package '<package_name>' unless -javapkg flag is specified.
|
|
|
|
By default, -target=android builds shared libraries for all supported
|
|
instruction sets (arm, arm64, 386, amd64). A subset of instruction sets
|
|
can be selected by specifying target type with the architecture name. E.g.,
|
|
-target=android/arm,android/386.
|
|
|
|
For -target ios, gomobile must be run on an OS X machine with Xcode
|
|
installed. Support is not complete. The -prefix flag can be used to prefix
|
|
the names of generated Objective-C types.
|
|
|
|
The -v flag provides verbose output, including the list of packages built.
|
|
|
|
The build flags -a, -n, -x, -gcflags, -ldflags, -tags, and -work
|
|
are shared with the build command. For documentation, see 'go help build'.
|
|
|
|
|
|
Compile android APK and iOS app
|
|
|
|
Usage:
|
|
|
|
gomobile build [-target android|ios] [-o output] [build flags] [package]
|
|
|
|
Build compiles and encodes the app named by the import path.
|
|
|
|
The named package must define a main function.
|
|
|
|
The -target flag takes a target system name, either android (the
|
|
default) or ios.
|
|
|
|
For -target android, if an AndroidManifest.xml is defined in the
|
|
package directory, it is added to the APK output. Otherwise, a default
|
|
manifest is generated. By default, this builds a fat APK for all supported
|
|
instruction sets (arm, 386, amd64, arm64). A subset of instruction sets can
|
|
be selected by specifying target type with the architecture name. E.g.
|
|
-target=android/arm,android/386.
|
|
|
|
For -target ios, gomobile must be run on an OS X machine with Xcode
|
|
installed. Support is not complete.
|
|
|
|
If the package directory contains an assets subdirectory, its contents
|
|
are copied into the output.
|
|
|
|
The -o flag specifies the output file name. If not specified, the
|
|
output file name depends on the package built.
|
|
|
|
The -v flag provides verbose output, including the list of packages built.
|
|
|
|
The build flags -a, -i, -n, -x, -gcflags, -ldflags, -tags, and -work are
|
|
shared with the build command. For documentation, see 'go help build'.
|
|
|
|
|
|
Remove object files and cached gomobile files
|
|
|
|
Usage:
|
|
|
|
gomobile clean
|
|
|
|
Clean removes object files and cached NDK files downloaded by gomobile init
|
|
|
|
|
|
Install android compiler toolchain
|
|
|
|
Usage:
|
|
|
|
gomobile init [-u]
|
|
|
|
Init builds copies of the Go standard library for mobile devices. If ANDROID_HOME
|
|
is set and the Android NDK is available, Android support is built. If on Darwin
|
|
and the Xcode command line utilities are installed, iOS support is built.
|
|
|
|
The toolchains are installed in $GOPATH/pkg/gomobile.
|
|
|
|
Init use the Android NDK installed by the Android SDK manager by default. Use the
|
|
-ndk flag to specify a custom location for the NDK.
|
|
|
|
If the -openal flag is specified, init also builds an Android version of OpenAL
|
|
from the source directory given. OpenAL enables support for gomobile build and
|
|
install with mobile apps using the golang.org/x/mobile/exp/audio/al package.
|
|
It needs cmake and, on Windows, nmake installed. If cmake is installed through
|
|
the Android SDK manager, init will use that.
|
|
|
|
Compile android APK and install on device
|
|
|
|
Usage:
|
|
|
|
gomobile install [-target android] [build flags] [package]
|
|
|
|
Install compiles and installs the app named by the import path on the
|
|
attached mobile device.
|
|
|
|
Only -target android is supported. The 'adb' tool must be on the PATH.
|
|
|
|
The build flags -a, -i, -n, -x, -gcflags, -ldflags, -tags, and -work are
|
|
shared with the build command.
|
|
For documentation, see 'go help build'.
|
|
|
|
|
|
Print version
|
|
|
|
Usage:
|
|
|
|
gomobile version
|
|
|
|
Version prints versions of the gomobile binary and tools.
|
|
|
|
|
|
Gobind gradle plugin
|
|
|
|
The gobind gradle plugin integrates gomobile (and gobind) with the Android gradle
|
|
build system. The plugin supports two modes, library project and direct integration.
|
|
|
|
The library project mode is suitable for exporting Go packages to Android apps. To activate it,
|
|
create a gradle subproject and configure the gobind plugin in the build.gradle file:
|
|
|
|
apply plugin: "org.golang.mobile.bind"
|
|
|
|
gobind {
|
|
// The Go package path; must be under one of the GOPATH elements or
|
|
// a relative to the current directory (e.g. ../../hello)
|
|
pkg = "golang.org/x/mobile/example/bind/hello"
|
|
|
|
// Optional GOPATH.
|
|
// GOPATH = "/YOUR/GOPATH"
|
|
|
|
// Optional path to the go executable.
|
|
// GO = "/path/to/go"
|
|
|
|
// Optionally, set the absolute path to the gomobile binary.
|
|
// GOMOBILE = "/path/to/gomobile"
|
|
|
|
// Pass extra parameters to command line. Optional.
|
|
// GOMOBILEFLAGS="-javapkg my.java.package"
|
|
|
|
// Absolute path to the gobind binary. Optional.
|
|
// GOBIND="/path/to/gobind"
|
|
|
|
// Optional list of architectures. Defaults to all supported architectures.
|
|
// GOARCH="arm amd64"
|
|
}
|
|
|
|
The direct integration mode is suitable for Go packages that import Java API, Android API,
|
|
project dependencies as well as generated R.* and Android databinding classes. In the
|
|
main Android project build.gradle, apply the gobind plugin after the android plugin:
|
|
|
|
apply plugin: 'com.android.application'
|
|
|
|
...
|
|
|
|
apply plugin: "org.golang.mobile.bind"
|
|
|
|
gobind {
|
|
pkg = "golang.org/x/mobile/example/bind/reverse"
|
|
}
|
|
|
|
*/
|
|
package main // import "golang.org/x/mobile/cmd/gomobile"
|