这篇文章不涉及 Go 编译原生 Android 和 iOS 应用,只讲述如何使用 Go 语言编译生成 Android 和 iOS SDK 库文件,并使用 Java (Android) 和 Objective-C (iOS)调用它们。

安装工具

要想使用 Go Mobile 功能,需要安装一个新工具 gomobile。Gomobile 是一个用于构建和运行用 Go 编写的移动应用程序的工具。

在 Windows 系统上,使用下面的命令:> set GO111MODULE=off

> go get golang.org/x/mobile/cmd/gobind

> go get golang.org/x/mobile/cmd/gomobile

> gomobile init

在 Linux 系统上使用下面的命令:$ GO111MODULE=off go get golang.org/x/mobile/cmd/gobind

$ GO111MODULE=off go get golang.org/x/mobile/cmd/gomobile

$ gomobile init

注意:gomobile 和 gobind 工具的支持模块正在开发中。在(https://golang.org/issues/27234)工作完成之前,使用 GO111MODULE=off 关闭模块模式(modules mode)。

如果安装工具时不使用 GO111MODULE=off 则会发生 gcc_android.c:6:25: fatal error: android/log.h: No such file or directory 错误。

Android SDK

在编写代码和构建库文件之前,需要:安装 Android SDK,并设置环境变量 $ANDROID_HOME ,

安装 Android NDK,并设置环境变量 $ANDROID_NDK_HOME ,

安装 GCC 编译器

准备条件完成后在 $GOPATH/src 目录下(如果不在 $GOPATH 目录下会发生 cannot find package 错误)新建一个文件夹名称为 mobile_test ,在文件夹下创建 main.go 文件,内容如下:package hello

import "fmt"

// Greetings test

func Greetings(name string) string {

return fmt.Sprintf("Hello %s", name)

}

在命令行终端下进入 mobile_test 目录,执行下列命令:$ cd $GOPATH/src/mobile_test

$ gomobile bind -o hello.aar -target=android

-target=android 命令会生成一个 AAR (Android ARchive) 文件来存档预编译的 Java API 存根类。默认的输出文件名是 .aar。AAR 文件常用于 Android 库项目的二进制发布,大多数 Android IDE 都支持 AAR 导入。

执行成功后在当前目录会生成 hello.aar 和 hello-sources.jar 文件。

将生成 hello.aar 和 hello-sources.jar 文件复制到项目的 “androidapp” 文件夹或在 Android Studio(1.2+) 中,可以使用模块导入向导导入 AAR 文件( File > New > New module > import .JAR 或 .AAR package),并将其设置为新的依赖项(File > Project Structure > Dependencies) :dependencies {

...

+ implementation files('src/main/JniLibs/hello-sources.jar')

+ implementation(name: 'hello', ext: 'aar')

}

然后就可以在项目中引用库文件的中的方法了,下面是 Kotlin 语言的简要代码:import hello.Hello

...

// Call Go function

val greetings = Hello.greetings("Android and Gopher")

下面是 Java 语言的简要代码:import hello.Hello

...

// Call Go function

String greetings = Hello.greetings("Android and Gopher")

iOS SDK

对于生成 iOS SDK,利用上一节的代码,在 Mac OS X 配置好环境,在终端上运行下列命令即可:$ cd $GOPATH/src/mobile_test

$ gomobile bind -target=ios mobile_test

Gomobile bind 将生成一个名为 Hello.framework 的框架包。打开你的 XCode 项目,将 Hello.framework 包拖放到 Xcode 项目中即可。

注意: 对于 target=ios 命令,gomobile 必须在安装了 Xcode 的 OS X 机器上运行。

然后就可以在项目中引用库文件的中的方法了,下面是 Objective-C 语言的简要代码:@import Hello; // Gomobile bind generated framework

...

textLabel.text = HelloGreetings(@"iOS and Gopher");

go语言ios android开发,Go 语言编写移动端 Android 和 iOS SDK相关推荐

  1. iOS 11开发教程(三)运行第一个iOS 11程序

    iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...

  2. android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...

    对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...

  3. android 开发对gif解码(适配android 4.2、4.3、4.4版本)

    android 开发对gif解码(适配android 4.2.4.3.4.4版本) 使用方法: public class ImageInputActivity extends Activity imp ...

  4. Android 开发 关于APP无法安装到Android模拟器上的问题

    Android 开发 关于APP无法安装到Android模拟器上的问题 我们在创建一个app后,打算安装到Android模拟器上.可能会出现无法安装,或者提示已经安装无法卸载的问题.这个时候需要添加兼 ...

  5. Android开发笔记(一百零六)支付缴费SDK

    第三方支付 第三方支付指的是第三方平台与各银行签约,在买方与卖方之间实现中介担保,从而增强了支付交易的安全性.国内常用的支付平台主要是支付宝和微信支付,其中支付宝的市场份额为71.5%,微信支付的市场 ...

  6. Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法

    Android开发中遇到的问题(四)--Android中WARNING: Application does not specify an API level requirement!的解决方法 参考文 ...

  7. Kotlin成为Android开发首选语言——你绝对不能错过的

    继Java 和 C++ 之后,Google 在 I/O 2017 上宣布 Android 加入了对 Kotlin 编程语言的支持. 将Kotlin语言作为安卓开发的一级编程语言.Kotlin由JetB ...

  8. Android开发——Kotlin语言

    语法 变量 类型转换 "不安全的"转换操作符 "安全的"转换操作符 函数 一行代码的情况 运算符 位运算符 程序控制语句 选择结构 循环结构 类和对象 继承与构 ...

  9. 2015ios和android开发,windows phone,微软BUILD2015:Windows 10把iOS/Android都吃了

    原标题:微软BUILD2015:Windows 10把iOS/Android"都吃了" [搜狐数码消息](文/苏野)微软在太平洋时间4月29日早8:30召开一年一度的开发者大会BU ...

  10. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

    1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...

最新文章

  1. 2019年最新深度强化学习PPT(DeepMind制作)
  2. Tensorflow nmt源码解析
  3. html之marquee详解[转]
  4. 修改默认runlevel
  5. Linux学习之系统编程篇:创建线程函数
  6. javascript 功能受限、原因和解决办法(一则)
  7. 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?
  8. 【Oracle】ORA-01157: cannot identify/lock data file 201 - see DBWR trace file
  9. 使用小乌龟快速上手git
  10. cad安装日志文件发生错误_cad安装出现错误 - 卡饭网
  11. ubuntu结束进程快捷键_ubuntu快捷键详细版
  12. xyz坐标转换ybc_GNSS仰角和方位角的计算及代码,XYZ转BLH坐标的代码及原理
  13. 华为机试二星题--机器人走迷宫
  14. 致敬!烈日下的测绘者,请为他们点赞!
  15. 软件测试基础知识汇总(问答篇)
  16. 电子病历模板编辑器_这几个邮件模板网站,帮助提升工作效率
  17. 那些 996 公司的员工怎么样了?
  18. 几何校正(image to image)
  19. vi/vim中复制粘贴命令
  20. 前端后端程序员必备的Linux基础知识

热门文章

  1. sharesdk第三方微博登录:你所访问的站点在微博认证失败,错误号:21322
  2. Vmware 安装 Ubuntu 虚拟机常用配置
  3. 如何修复 WordPress 定制开发中登录重定向循环?
  4. mysql查询 展示横纵坐标_sql 分组统计查询并横纵坐标转换
  5. 山科机器人招聘| 算法总监及视觉、规划、融合定位算法工程师
  6. speedoffice表格里面如何增加表格
  7. Grafana连接elastic search 实现数据实时显示
  8. Tikmeta分享 |达人营销,你知道多少?
  9. cad放大_CAD看图软件中命令面板功能的妙用你知道吗?
  10. fseek和ftell