Golang1.4就对Android开发做了些支持,1.5版本前几天好像发布了,特意看了整理下,1.5支持32位与64位的android与IOS应用开发了,当然还不是很好用,听说性能比Java做的程序超出很多,Native就不用说了,但也没有实践压测所也不敢确定,这里只整理下基本流程:

环境搭建安装 golang 1.5, 设置 GOROOT,GOPATH 环境变量。

简单说明:Golang 1.5 提供了两个内核支持,darwin/arm 和 darwin/arm64.,Golang mobile并不是go1.5软件包里面的一部分,但是基于内核,必须安装Golang1.5以上。

安装gomobile

go get golang.org/x/mobile/cmd/gomobile

安装android(apk)编译工具,(如果仅开发IOS则可省略这一步,但要有XCode支持)

gomobile init

大功告成,说明一下,安装gomobile的时候,貌似把golang.org/x/mobile下的库都一并安装了,如果发现没有安装,可以手动安装,或者安装一个demo实例 golang.org/x/mobile/example/basic ,会自动安装一般所需要的库。如下,看名字就大概明白功能,不做多说

说明

app

Package app lets you write portable all-Go apps for Android and iOS.

app/internal/apptest

Package apptest provides utilities for testing an app.

app/internal/testapp

Small test app used by app/app_test.go.

asset

Package asset provides access to application-bundled assets.

bind

Package bind implements a code generator for gobind.

bind/java

Package java implements the Java language bindings.

bind/java/testpkg

Package testpkg contains bound functions for testing the cgo-JNI interface.

bind/objc

Package objc implements the Objective-C language bindings.

bind/objc/testpkg

bind/objc/testpkg/go_testpkg

Package go_testpkg is an autogenerated binder stub for package testpkg.

bind/seq

Package seq implements the machine-dependent seq serialization format.

cmd/gobind

Gobind generates language bindings that make it possible to call Go functions from Java and Objective-C.

cmd/gomobile

Gomobile is a tool for building and running mobile apps written in Go.

event/key

Package key defines an event for physical keyboard keys.

event/lifecycle

Package lifecycle defines an event for an app’s lifecycle.

event/mouse

Package mouse defines an event for mouse input.

event/paint

Package paint defines an event for the app being ready to paint.

event/size

Package size defines an event for the dimensions, physical resolution and orientation of the app’s window.

event/touch

Package touch defines an event for touch input.

example/audio

An app that makes a sound as the gopher hits the walls of the screen.

example/basic

An app that draws a green triangle on a red background.

example/bind/hello

Package hello is a trivial package for gomobile bind example.

example/network

An app that paints green if golang.org is reachable when the app first starts, or red otherwise.

example/sprite

An app that demonstrates the sprite package.

exp/app/debug

Package debug provides GL-based debugging tools for apps.

exp/audio

Package audio provides a basic audio player.

exp/audio/al

Package al provides OpenAL Soft bindings for Go.

exp/f32

Package f32 implements some linear algebra and GL helpers for float32s.

exp/font

Package font provides platform independent access to system fonts.

exp/gl/glutil

Package glutil implements OpenGL utility functions.

exp/sensor

Package sensor provides sensor events from various movement sensors.

exp/sprite

Package sprite provides a 2D scene graph for rendering and animation.

exp/sprite/clock

Package clock provides a clock and time functions for a sprite engine.

exp/sprite/glsprite

Package glsprite implements a sprite Engine using OpenGL ES 2.

exp/sprite/portable

Package portable implements a sprite Engine using the image package.

geom

Package geom defines a two-dimensional coordinate system.

gl

Package gl implements Go bindings for OpenGL ES 2.

internal/loader

internal/mobileinit

Package mobileinit contains common initialization logic for mobile platforms that is relevant to both all-Go apps and gobind-based apps.

使用说明很简单,除了init安装与version看版本外,仅三个命令

bind : 构造一个共享库提供给android/ios应用程序使用,使用bind会生成一个静态文件可以引入到android/ios项目中,通过java/oc等调用。

build : 将代码打包成apk或ios app

install : 直接在android设备上运行,需要机器自带adb连接程序。

编写代码,代码一定要在 GOPATH/src下,可以参考官方的DEMO,有必要说的是,现在由于没有什么好的工具或框架,只能通过自己实现界面输出,基于OpenGL去绘制显示页面。不熟悉OpenGL的同学可以等一等,有什么好用的库或像Java一样的MVC布局框架出来,当然你致力于OpenGL开发就另说了,OpenGL的API本身并不算太复杂,也是很费时,最难搞的是数学要牛B。

或者你可以把业务实现用Golang实现,封装成so文件,给java/oc等去调用。这样也可以共用一套业务逻辑代码。比如本项目可以这样编译:

//获取项目

go get github/ada87/goap

//在windows切换到D盘(API保存位置)

d:

//编译成APK(使用gomobile 可以直接安装到手机上)

gomobile build github.com/ada87/goap

那么d盘就会生成一个goap.apk安装文件(也可以通过参数设置路径),可以弄到手机上安装看效果,如果电脑开了虚拟机或连了手机也可以直接使用gomobile install命令直接安装到设备上。

基本都可以了,只是现在我用的LiteIDE还不能编译Gomobile项目,只能通过命令行编译了~所以非常不方便,希望快速发展敢快成熟起来吧。

如果想编译IOS应用,或做so工具包,详情还是请参照官方文档或gomobile help,就不多说了。

问题

当然使用起来顺利就好,不顺利的话,会是以下问题:

提示GCC未安装时,可以下载一个WinGW,这里给个64位的下载地址,32位的也可以去上级目录去找。下载完成后,把 mingw64/bin的路径配置到环境变量 path 里面去即可。本人早就装了所以没有这个问题

如果要使用gomobile install命令直接将APK安装到手机上的话(android用户,本人不玩苹果不讨论),要下载一个ADB.并将ADB的目录也配置到环境变量里面去.

本人遇到的问题:本人用的国产某手机不知为何adb devices发现不了,很是不爽(使用91,豌豆夹都可以,但本人最讨厌此类软件存在于电脑上)。可能有两个原因:

网上下载的adb大都是1.0.26的(adb version),可以用1.0.32代替。本站ADB 1.0.32 本站下载

某些手机厂商篡改了连接驱动。本人的手机就是如此,辛亏连接后,有个连接方式为(使用内置光盘),使用这个连接方式,然后打开后就可以看到电脑上多了个驱动盘,在电脑设备管理器上看到有个感叹号的adb什么的,更新驱动,手动定位到驱动盘更新,就OK了。