GoMobile Android 开发

阅读 5993 收藏 73 2017-05-08
原文链接:songhang.club
https://juejin.im/entry/59104f2d128fe1005857f534

GoMobile现为google实验项目,尚未提供用户最终版。支持ios & android双平台,支持全部用go来写app (all-Go app),
(all-Go app目前仅支持OPEN GL绘制界面),支持java、Object-C互调 (go libraries).

GoMobile配置

默认Go环境已配置完成, Go环境配置不再赘述。

自动安装

  1. $ go get golang.org/x/mobile/cmd/gomobile

坑:需科学上网,可能会校验证书失败,笔者在公司网络未能成功下载。

手动安装

download

下载成功后改文件名为mobile, copy到$GOPATH/src/golang.org/x/

  1. $ git clone https://github.com/golang/mobile

build

build gomobile成功后会在$GOPATH/bin目录生成gomobile可执行程序,(执行过程中可能出现权限被拒,添加对应权限即可),copy gomobile程序至/usr/local/go/bin/目录,即可执行gomobile命令。

  1. $ go build golang.org/x/mobile/cmd/gomobile

init

初始化环境,自动下载安装依赖,需要翻墙,可能会提示权限被拒,添加对应文件权限。

  1. $ gomobile init

config ndk

可能会提示” No android NDK path is set “错误。解决办法如下:

因gomobile init未同时下载ndk,所以需要手动下载ndk环境,然后执行

  1. $ gomobile init -ndk ~/Library/Android/sdk/ndk-bundle/

末尾路径为ndk安装路径,针对自己安装目录选择。

All-GO APP

google demo, 源码目录: golang.org/x/mobile/example/basic

编译 Android Demo

  1. $ gomobile build -target=android golang.org/x/mobile/example/basic

运行 Android Demo

确认adb已经识别手机

  1. $ gomobile install golang.org/x/mobile/example/basic

安装成功后,即可打开一个随手势移动的三角形程序。

Go Libraries

google demo, 源码目录: golang.org/x/mobile/example/bind/

android目录为android studio project, hello目录为go libs源码

Go libs创建

GOPTAH中创建libs目录存放go源码 [对应demo中golang.org/x/mobile/example/bind/hello]

  1. // 网络请求,输入url,返回response
  2. package helloimport (
  3. "fmt"
  4. "net/http"
  5. "io/ioutil"
  6. )
  7. func Greetings(url string) string {
  8. resp, err := http.Get(url)
  9. if err != nil {
  10. return fmt.Sprintf("error: %s", err)
  11. }
  12. b, err := ioutil.ReadAll(resp.Body)
  13. resp.Body.Close()
  14. if err != nil {
  15. return fmt.Sprintf("error: %s", err)
  16. }
  17. return fmt.Sprintf("Hello, %s!", b)
  18. }

android配置

Libs Module

创建libs module[对应demo中golang.org/x/mobile/example/bind/android/hello],app module对其依赖

libs module建立go源码依赖, build文件配置如下

  1. /* bind 插件 */
  2. plugins {
  3. id "org.golang.mobile.bind"
  4. version "0.2.6"
  5. }
  6. gobind {
  7. /* go libs 目录 */
  8. pkg = "golang.org/x/mobile/example/bind/hello"
  9. /* gopath 目录 */
  10. GOPATH = "/Users/hangsong/go"
  11. /* gobin 目录 */
  12. GO = "/usr/local/go/bin"
  13. /* gombile 目录 */
  14. GOMOBILE = "/usr/local/go/bin/gomobile"
  15. }

App Module

build完成后,在MainActivity调用go libs代码

  1. package org.golang.example.bind;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.TextView;
  5. import hello.Hello;
  6. public class MainActivity extends Activity {
  7. private TextView mTextView;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. mTextView = (TextView) findViewById(R.id.mytextview);
  13. // Call Go function.
  14. String greetings = Hello.greetings("http://baidu.com");
  15. mTextView.setText(greetings);
  16. }
  17. }

添加联网权限,程序run起来后,将能看到网络返回信息显示.

总结

go语言已在服务端大放异彩,七牛、头条、阿里已经证明了go的先天优势,
代码简洁,格式统一,语法简练,多核心高并发,
提高开发效率的同时,兼备媲美C,C++的运行速度,势必会成为下一代经典语言!

现阶段go在移动领域仅支持OpenGl绘制界面,仍无法撼动java,Object-C地位,
但是有着google的加持,相信不久的将来在android领域会替换java,被人诟病的android响应速度,定会得到质的提升!

ft_authoradmin  ft_create_time2019-03-30 17:39
 ft_update_time2019-03-30 17:49