这篇文章不涉及 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

在 OS X 系统上,需要安装 Xcode Command Line Tools

注意:gomobilegobind 工具的支持模块正在开发中。在(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 存根类。默认的输出文件名是 <package_name>.aar。AAR 文件常用于 Android 库项目的二进制发布,大多数 Android IDE 都支持 AAR 导入。

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

将生成 hello.aarhello-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");

标签: Android, iOS, GO, Golang, 移动端, SDK

添加新评论