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了。