文档章节

Golang Android 开发

____追梦人
 ____追梦人
发布于 2015/02/03 09:33
字数 729
阅读 150
收藏 1

前言

随着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:0from/Users/qipeng/program/android/android-ndk-r10d/lib/gcc/arm-linux-androideabi/4.9/include-fixed/limits.h:168from/Users/qipeng/program/android/android-ndk-r10d/lib/gcc/arm-linux-androideabi/4.9/include-fixed/syslimits.h:7from/Users/qipeng/program/android/android-ndk-r10d/lib/gcc/arm-linux-androideabi/4.9/include-fixed/limits.h:34from/Users/qipeng/program/android/android-ndk-r10d/sysroot/usr/include/signal.h:34from/Users/qipeng/program/android/android-ndk-r10d/sysroot/usr/include/pthread.h:33from/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就好了


本文转载自:

____追梦人
粉丝 18
博文 123
码字总数 21429
作品 0
青岛
Android工程师
私信 提问
Go 语言 1.4 版本将支持面向 Android 开发

在前些日子谷歌于2009年发布的第二款自家语言Go语言刚刚发布了1.3正式版,大幅度解决了GC问题,最近谷歌开发版里又有了新爆料:谷歌终于要在1.4版本中正式支持Android系统开发,可以编译器直...

oschina
2014/06/22
10.8K
61
Bytom移动端钱包SDK开发基础

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom Bytom-Mobile-Wallet-SDK 是从bytom源码中抽离出的钱包层代码,并且对钱包...

比原链Bytom
2018/09/10
0
0
郑州 GDG DevFest 2017

什么是 DevFest 活动? DevFest 全名为 Developers Festival(开发者节日),是 Google 每年秋季在全球 GDG(谷歌开发者社区,全球共有 664 个活跃社区)推行的,针对 Google 技术开发者、爱好...

郑州GDG
2017/11/14
162
21
郑州 GDG DevFest 2017

什么是 DevFest 活动? DevFest 全名为 Developers Festival(开发者节日),是 Google 每年秋季在全球 GDG(谷歌开发者社区,全球共有 664 个活跃社区)推行的,针对 Google 技术开发者、爱好...

郑州GDG
2017/11/14
654
22
虚拟机调试和真机调试的问题

我一直用genymotion调试 今天用了下真机调试竟然不行 调试的是android的客户端 golang的服务端 http服务器 json发送数据 他们肯定是没问题的 因为换了个同学电脑我就可以了 安卓端报错有 In...

a24729298
2016/03/02
329
1

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
54分钟前
3
0
Kafka 2.3 Producer (0.9以后版本适用)

kafka0.9版本以后用java重新编写了producer,废除了原来scala编写的版本。 这里直接使用最新2.3版本,0.9以后的版本都适用。 注意引用的包为:org.apache.kafka.clients.producer import ja...

实时计算
今天
3
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
15
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部