前言
随着Golang发布1.4正式版,Android下的开发也可以实现(go/mobile)了,就等1.5版本的ios支持了,可以使用golang跨平台开发游戏了...
环境准备
Ant
下载apache-ant并配置好环境变量。
$ANT_HOME=antpath //你的ant目录$PATH=$ANT_HOME/bin:$PATH
Android
下载SDK,android-ndk-r9d(这里之所以不用r10d是因为在测试时ndk源码出现问题,而r9d没有问题)。安装并配置环境变量。
$ANDROID_HOME=sdkpath //你的sdk目录$NDK_ROOT=ndkpath //你的ndk目录$PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$NDK_ROOT:$PATH
Go
1.下载Go,或者克隆。
Git$ git clone https://github.com/golang/go.git
Hg(不推荐使用)$ hg clone https://code.google.com/p/go
2.配置环境变量
$GOOS=darwin$GOARCH=amd64$GOROOT=gopath //你的go源码目录$GOPATH=goworkpath //你的go工作目录$GOBIN=$GOPATH/bin$PATH=$GOBIN:$GOROOT/bin:$PATH
3.编译 使用console进入go源码目录执行
$cd $GOROOT/src$./all.bash
4.测试
$go versiongo version devel +082a237 Fri Dec 12 04:59:51 2014 +0000 darwin/amd64
构建Golang Android环境
Android NDK交叉环境构建
$$NDK_ROOT/build/tools/make-standalone-toolchain.sh --platform=android-9 \ --install-dir=$NDK_ROOT --system=darwin-x86_64
执行结果:
Auto-config: --toolchain=arm-linux-androideabi-4.6Copying prebuilt binaries...Copying sysroot headers and libraries...Copying libstdc++ headers and libraries...Copying files to: /Users/qipeng/program/android/android-ndk-r9d
Golang 交叉环境构建
$cd $GOROOT/src$CC_FOR_TARGET=$NDK_ROOT/bin/arm-linux-androideabi-gcc GOOS=android \ GOARCH=arm GOARM=7 CGO_ENABLED=1 ./make.bash
执行结果:
Installed Go for android/arm in /Users/qipeng/program/goInstalled commands in/Users/qipeng/mac/workspace/go/bin
测试
使用官方(go/mobile)自带例子测试。
$go get golang.org/x/mobile //由于gfw可能无法下载,可以翻墙也可以从Github上下载并move到golang.org/x/mobile下$cd$GOPATH/src/golang.org/x/mobile/example/basic$./all.bash //最好连接你的手机并开启usb调试,这样编译完成后会直接在手机上运行。
编译后APK:点击下载运行成功的话,你将看到
踩到的坑
android-ndk-r10d 报错,换android-ndk-r9d没事。# runtime/cgo/Users/qipeng/program/go/src/runtime/cgo/gcc_android_arm.c:16:0: error: "PTHREAD_KEYS_MAX" redefined [-Werror]#definePTHREAD_KEYS_MAX 128^In file included from/Users/qipeng/program/android/android-ndk-r10d/sysroot/usr/include/limits.h:86:0, from/Users/qipeng/program/android/android-ndk-r10d/lib/gcc/arm-linux-androideabi/4.9/include-fixed/limits.h:168, from/Users/qipeng/program/android/android-ndk-r10d/lib/gcc/arm-linux-androideabi/4.9/include-fixed/syslimits.h:7, from/Users/qipeng/program/android/android-ndk-r10d/lib/gcc/arm-linux-androideabi/4.9/include-fixed/limits.h:34, from/Users/qipeng/program/android/android-ndk-r10d/sysroot/usr/include/signal.h:34, from/Users/qipeng/program/android/android-ndk-r10d/sysroot/usr/include/pthread.h:33, from/Users/qipeng/program/go/src/runtime/cgo/gcc_android_arm.c:5:/Users/qipeng/program/android/android-ndk-r10d/sysroot/usr/include/sys/limits.h:166:0: note:this is the location of the previous definition#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX^cc1: all warnings being treated as errors
Unable to resolve project target 'android-19' 新下载的SDK没有'android-19'这个版本。可以在'build.xml'换'android-19'为SDK里有的版本,或者在SDK里安装'android-19'这个版本。
cc1: error: unrecognized command line option '-m64' 当成功编译Android后,再go get 其他cgo库到本地时报错,原因是使用Android环境的make.bash造成的,也就是说无法cgo本地环境和android环境并存,但并不影响不使用cgo的库。当需要使用本的cgo时,再到$GOROOT/src下执行一次make.bash就好了