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