轻松搭建基于go1.5开发Android应用的环境

weizhe86 · 2015-07-18 07:58:28 · 14616 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-07-18 07:58:28 的主题,其中的信息可能已经有所发展或是发生改变。

原文https://blog.weizhe.net/?p=534 有兴趣的同学欢迎来一起玩:https://github.com/vzever/gomobileapp

go1.5beta2已经发布,正式版将在8月份发布.而早在go1.4就已发布了golang/mobile项目用以实现Android应用的开发.当前gomobile的环境部署已经相对成熟了.但项目声明必须基于go1.5,所以go1.4的同学必须要升级.因为在go1.4执行gomobile init的时候是不能通过的.

注:如果没有网络权限访问golang.org,请创建$GOPATH/src/github.com/golang的软链接为$GOPATH/src/golang.org/x,并且后续go get的时候把golang.org/x/ 替换为 github.com/golang/

第一步. 部署go1.5beta2

官方网站下载go1.5beta2的linux安装包,并按照官网部署到/usr/local. 配置/usr/local/go/bin 到$PATH中,如下写入/etc/profile 或$HOME/.profile

export PATH=$PATH:/usr/local/go/bin

然后还需要将其他golang环境变量加入$HOME/.profile

exprot GOPATH=$HOME/gocode/
export PATH=$PATH:$GOPATH/bin

第二步 部署golang/mobile

参照golang/mobile文档执行以下命令 $ go get golang.org/x/mobile/cmd/gomobile $ gomobile init -v 如果提示没有权限如下

#Building standard library for android/arm.
runtime
go install runtime: mkdir /usr/local/go/pkg/android_arm/: permission denied
gomobile: go install std for android/arm failed: exit status 1

需要授权/usr/local/go/pkg给当前用户

# chown -R myname:myname /usr/local/go/pkg

然后再次执行

$ gomobile init -v
Downloading https://dl.google.com/go/mobile/gomobile-ndk-r10e-linux-x86_64.tar.gz.
Downloading https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz.
Building standard library for android/arm.
runtime
errors
sync/atomic
...
testing/quick
net/rpc/jsonrpc
Done, build took 23s.

第三步 使用go run 在桌面测试程序

$ cd $GOPATH/src/golang.org/x/mobile/example/basic
$ go run main.go

第四步 使用gomobile直接生成apk格式Android应用.

$ cd $GOPATH/src/golang.org/x/mobile/example/basic
$ gomobile build
$ ls
main.go basic.apk

或者连接android手机,确保adb shell可以登录手机之后,直接编辑并安装APK

$ cd $GOPATH/src/golang.org/x/mobile/example/basic
$ gomobile install

最后安装到Android L

除network.apk无法启动外,basic audio和sprite都正常.甚至github.com/mmchugh/gomobile-examples的cube也运行正常.以下为截图

手机截图 basic/audio/sprite/cube

PC截图


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

14616 次点击  ∙  4 赞  
加入收藏 微博
25 回复  |  直到 2017-02-03 07:22:48
ThoseFlowers
ThoseFlowers · #1 · 10年之前

很好

lhlt138
lhlt138 · #2 · 10年之前

大神啊!~~!牛

lhlt138
lhlt138 · #3 · 10年之前

必须加个朋友啊。。留个联系方式吧

Yunuotu
Yunuotu · #4 · 10年之前

太棒了。我尝试过了,只有第三步go run main.go不成功,出现work.h:6:23: fatal error: GLES2/gl2.h: No such file or directory #include <GLES2/gl2.h>.

weizhe86
weizhe86 · #5 · 10年之前
YunuotuYunuotu #4 回复

太棒了。我尝试过了,只有第三步go run main.go不成功,出现work.h:6:23: fatal error: GLES2/gl2.h: No such file or directory #include .

$ cd $GOPATH $ find . -name gl2.h ./pkg/gomobile/android-ndk-r10e/arm/sysroot/usr/include/GLES2/gl2.h

你确定执行 $ gomobile init -v 了吗? 下载成功了吗? Downloading https://dl.google.com/go/mobile/gomobile-ndk-r10e-linux-x86_64.tar.gz. Downloading https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz.

weizhe86
weizhe86 · #6 · 10年之前
YunuotuYunuotu #4 回复

太棒了。我尝试过了,只有第三步go run main.go不成功,出现work.h:6:23: fatal error: GLES2/gl2.h: No such file or directory #include .

或者试试 # apt-get install libgles2-mesa-dev

Yunuotu
Yunuotu · #7 · 10年之前
weizhe86weizhe86 #5 回复

#4楼 @Yunuotu $ cd $GOPATH $ find . -name gl2.h ./pkg/gomobile/android-ndk-r10e/arm/sysroot/usr/include/GLES2/gl2.h 你确定执行 $ gomobile init -v 了吗? 下载成功了吗? Downloading https://dl.google.com/go/mobile/gomobile-ndk-r10e-linux-x86_64.tar.gz. Downloading https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz.

gomobile init -v了,也自动成功了那两个。

Yunuotu
Yunuotu · #8 · 10年之前
weizhe86weizhe86 #5 回复

#4楼 @Yunuotu $ cd $GOPATH $ find . -name gl2.h ./pkg/gomobile/android-ndk-r10e/arm/sysroot/usr/include/GLES2/gl2.h 你确定执行 $ gomobile init -v 了吗? 下载成功了吗? Downloading https://dl.google.com/go/mobile/gomobile-ndk-r10e-linux-x86_64.tar.gz. Downloading https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz.

执行了gomobile init -v,成功下载了那两个文件。但是init过程中没有出现permission denied,也就是说我的init过程没有执行mkdir /usr/local/go/pkg/android_arm/这一步。我猜可能是github.com/golang/mobile的代码更新太快了。

Yunuotu
Yunuotu · #9 · 10年之前
weizhe86weizhe86 #5 回复

#4楼 @Yunuotu $ cd $GOPATH $ find . -name gl2.h ./pkg/gomobile/android-ndk-r10e/arm/sysroot/usr/include/GLES2/gl2.h 你确定执行 $ gomobile init -v 了吗? 下载成功了吗? Downloading https://dl.google.com/go/mobile/gomobile-ndk-r10e-linux-x86_64.tar.gz. Downloading https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz.

对cube进行go build出错,原因还是github.com/golang/mobile更新太快,package app和package event的代码已经发生变化。我尝试修改cube的代码,go build通过了,但是在手机上运行不成功,一直黑屏无响应。

Yunuotu
Yunuotu · #10 · 10年之前
YunuotuYunuotu #9 回复

#5楼 @weizhe86 对cube进行go build出错,原因还是github.com/golang/mobile更新太快,package app和package event的代码已经发生变化。我尝试修改cube的代码,go build通过了,但是在手机上运行不成功,一直黑屏无响应。

上面写错了,应该是gomobile build

weizhe86
weizhe86 · #11 · 10年之前
YunuotuYunuotu #9 回复

#5楼 @weizhe86 对cube进行go build出错,原因还是github.com/golang/mobile更新太快,package app和package event的代码已经发生变化。我尝试修改cube的代码,go build通过了,但是在手机上运行不成功,一直黑屏无响应。

先用我的fork吧 github.com/vzever/gomobile-examples 两天前已经push request给原作者了

weizhe86
weizhe86 · #12 · 10年之前
weizhe86weizhe86 #11 回复

#9楼 @Yunuotu 先用我的fork吧 github.com/vzever/gomobile-examples 两天前已经push request给原作者了

github.com/vzever/gomobileapp 我写的几个事例 可以一起玩一玩

weizhe86
weizhe86 · #13 · 10年之前
YunuotuYunuotu #8 回复

#5楼 @weizhe86 执行了gomobile init -v,成功下载了那两个文件。但是init过程中没有出现permission denied,也就是说我的init过程没有执行mkdir /usr/local/go/pkg/android_arm/这一步。我猜可能是github.com/golang/mobile的代码更新太快了。

没错,现在pkg文件从$GOROOT/pkg/调整讨$GOPATH/pkg/了,就不会出现权限问题了. //#5楼 @weizhe86 执行了gomobile init -v,成功下载了那两个文件。但是init过程中没有出现permission denied,也就是说我的init过程没有执行mkdir /usr/local/go/pkg/android_arm/这一步。我猜可能是github.com/golang/mobile的代码更新太快了。

Yunuotu
Yunuotu · #14 · 10年之前
weizhe86weizhe86 #11 回复

#9楼 @Yunuotu 先用我的fork吧 github.com/vzever/gomobile-examples 两天前已经push request给原作者了

谢谢你了,cube终于可以愉快地运行了。看了你的代码,我发现我黑屏的原因是少写了一句a.EndPaint()。

binbin
binbin · #15 · 10年之前

请教, go get golang.org/x/mobile/cmd/gomobile 怎么直接报错: package golang.org/x/mobile/cmd/gomobile: unrecognized import path "golang.org/x/mobile/cmd/gomobile"

binbin
binbin · #16 · 10年之前
binbinbinbin #15 回复

请教, go get golang.org/x/mobile/cmd/gomobile 怎么直接报错: package golang.org/x/mobile/cmd/gomobile: unrecognized import path "golang.org/x/mobile/cmd/gomobile"

自己的问题,搞定了

googya
googya · #17 · 10年之前
binbinbinbin #16 回复

#15楼 @binbin 自己的问题,搞定了

是什么问题?

violet
violet · #18 · 10年之前
YunuotuYunuotu #9 回复

#5楼 @weizhe86 对cube进行go build出错,原因还是github.com/golang/mobile更新太快,package app和package event的代码已经发生变化。我尝试修改cube的代码,go build通过了,但是在手机上运行不成功,一直黑屏无响应。

0.0自己修改的么?

heyishi
heyishi · #19 · 10年之前
YunuotuYunuotu #4 回复

太棒了。我尝试过了,只有第三步go run main.go不成功,出现work.h:6:23: fatal error: GLES2/gl2.h: No such file or directory #include .

我也是在go run main.go出现同样的错误 请问如何解决

heyishi
heyishi · #20 · 10年之前

第三步go run main.go不成功,出现work.h:6:23: fatal error: GLES2/gl2.h: No such file or directory #include <GLES2/gl2.h>. 请您帮助解决

victorht
victorht · #21 · 10年之前
binbinbinbin #15 回复

请教, go get golang.org/x/mobile/cmd/gomobile 怎么直接报错: package golang.org/x/mobile/cmd/gomobile: unrecognized import path "golang.org/x/mobile/cmd/gomobile"

请问是如何解决的,我也遇到相同的问题

zhongguo168a
zhongguo168a · #22 · 9年之前

请问生成的apk多大啊?

ttyige
ttyige · #23 · 9年之前

东西 不错啊.我能运行了.是不是编译了二进制 .还是转成了JAVA的?要是能有一个浏览器就完美了。。。做几个界面。后台用GO 。。。开发既美观又高效 .

wangfeiping
wangfeiping · #24 · 9年之前

终于可以用Go开发android了,找时间一定试一下

cqxiaopy
cqxiaopy · #25 · 8年之前

执行 ./gomobile init -v

Installing std.

Installing std.

Installing std.

Installing std.

Done, build took 0s.

提示这些东西,没有下载,怎么解决? 我手动下载了文件,但是只要放到pkg目录下面, 执行init后,pkg下面的文件都不见了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传