Go Wiki: Mobile
Go 移動子儲存庫增加了對移動平臺(Android 和 iOS)的支援,並提供了構建移動應用程式的工具。
您可以遵循兩種策略將 Go 整合到您的移動堆疊中
- 編寫全 Go 原生移動應用程式。
- 透過生成 Go 包的繫結來編寫 SDK 應用程式,並從 Java(Android)和 Objective-C(iOS)呼叫它們。
本文將包含分步指南,說明如何實現這些策略。
工具
您需要擁有 Go 1.16 或更高版本才能安裝移動工具。
Go Mobile 引入了一個名為 gomobile 的工具,以幫助您完成構建和繫結過程。
gomobile 還支援 Go Modules,例如使用
$ gomobile bind -v -o android.aar -target=android ./package
在一個專案目錄中。
在 macOS 上,您需要安裝 Xcode 命令列工具。
安裝 gomobile 工具
$ go install golang.org/x/mobile/cmd/gomobile@latest
$ gomobile init
以下各節將幫助您瞭解如何使用 gomobile 工具。
原生應用程式
原生類別包括完全用 Go 編寫的應用程式。目前,golang.org/x/mobile 只包含一小組專注於
- 應用控制和配置
- OpenGL ES 2 和 ES 3 繫結
- 資產管理
- 事件管理
- 實驗性包包括 OpenAL 繫結、音訊、字型、精靈和運動感測器
在 golang.org/x/mobile/example 下有各種示例原生應用程式。我們將構建並部署基本示例到 Android 和 iOS 裝置。
獲取應用程式。
$ go get -d golang.org/x/mobile/example/basic
構建和部署到 Android
執行 gomobile build 來構建 Android APK。
$ gomobile build -target=android -androidapi 19 golang.org/x/mobile/example/basic
構建命令將構建一個名為 basic.apk 的 APK。
如果包目錄中定義了 AndroidManifest.xml,它將被新增到 APK 輸出中。否則,將生成預設清單。
如果您在計算機上安裝了 adb 命令,您可以使用 gomobile install 來構建 APK 並將其推送到您的移動裝置。
$ gomobile install golang.org/x/mobile/example/basic
構建和部署到 iOS
執行 gomobile build 來將包構建為 iOS 應用程式。
注意:target=ios 需要執行 macOS 的主機。您需要獲取 簽名身份並下載預配配置檔案才能繼續。
$ gomobile build -target=ios golang.org/x/mobile/example/basic
構建命令將構建一個名為 basic.app 的應用程式包。
您可以透過將 .app 檔案拖放到裝置上來進行部署。
- 在 Xcode 中,開啟 Window > Devices。
- 從左側窗格中選擇物理裝置。
- 將 .app 檔案拖放到“已安裝的應用”部分。
- 選中“需要時複製專案”選項

或者,您可以使用 ios-deploy 命令列工具將應用程式包部署到您的 iOS 裝置。使用 ios-deploy 將應用程式推送到您的裝置。
$ ios-deploy -b basic.app
應用圖示
可以透過建立 assets/icon.png 來設定應用圖示。
SDK 應用程式和生成繫結
在此類別中,我們將展示如何將 Go 包用於現有的 Android 或 iOS 應用程式。
遵循此策略的優勢
- 您可以在不更改現有應用程式的情況下,從移動應用中重用 Go 包。
- 如果您想在 Android 和 iOS 應用程式之間共享通用程式碼庫,您可以將通用功能編寫一次在 Go 中,並透過呼叫繫結後的 Go 包來將其連線到特定於平臺的程式碼。
當前限制如下。
- 目前只支援 一部分 Go 型別。
- 語言繫結存在效能開銷。
- 由於目標語言的限制,匯出的 API 的外觀有一些限制。
我們將使用 golang.org/x/mobile/example/bind/hello 下的示例包來生成繫結,並從 Java 和 Objective-C 呼叫 Greetings 函式。
透過執行以下命令獲取示例。
$ go get -d golang.org/x/mobile/example/bind/...
構建和部署到 Android
注意:Go Mobile 在與 Go 相同的架構上執行,目前包括 ARM、ARM64、386 和 amd64 裝置和模擬器。值得注意的是,Android 在 MIPS 裝置上尚不支援。
- 執行以下命令以生成適合匯入到 Android 專案的 aar 檔案
$ gomobile bind -o app/hello.aar -target=android golang.org/x/mobile/example/bind/hello
提示:從 1.16 開始,建議在每次執行 gomobile bind ... 之前執行 go get -d golang.org/x/mobile/cmd/gomobile。go get 會自動將間接引用新增到 go.mod。這些間接引用可能會被 ide 或 go mod tidy 自動刪除,但它們是必需的!
require (
golang.org/x/mobile v0.0.0-20210716004757-34ab1303b554 // indirect
golang.org/x/mod v0.4.2 // indirect
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect
golang.org/x/tools v0.1.2 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
)
- 啟動 Android Studio。
- File > Import Project… 從 $GOPATH/src/golang.org/x/mobile/example/bind/android 匯入參考專案。

- 構建並部署應用程式到裝置。
應用模組包含呼叫 hello.Greetings 的主應用程式。當應用程式啟動時,文字檢視將使用返回的字串值進行更新。
如果您不使用 Android Studio,為了使用 Android 的繫結,您需要安裝 Android SDK 並將 ANDROID_HOME 環境變數設定為 SDK 路徑。您還需要安裝 NDK;最簡單的方法是執行 SDK 命令 sdkmanager ndk-bundle。
或者,如果您不熟悉 Android 開發,並且不想設定所有必需的環境(Android SDK、Gradle 等),您可以使用 此 Docker 映象在 Docker 中構建應用程式。
此外,如果您嘗試將 yourmodule.aar 新增到您自己的專案中,在將 yourmodule.aar 檔案和 yourmodule.jar 檔案複製到“android\app”資料夾後,需要在“android\app\build.gradle”檔案中進行以下編輯,以便正確匯入您的模組。
+ repositories {
+ flatDir {
+ dirs '.'
+ }
+ }
dependencies {
...
+ implementation (name:'yourmodulename', ext:'aar')
}
構建和部署到 iOS
注意:target=ios 需要執行 macOS 的主機。
$ cd $GOPATH/src/golang.org/x/mobile/example/bind
$ gomobile bind -target=ios golang.org/x/mobile/example/bind/hello
Gomobile bind 將生成一個名為 Hello.framework 的框架包。透過執行以下命令開啟示例 Xcode 專案。
$ open ios/bind.xcodeproj
將 Hello.framework 包拖放到 Xcode 專案中。如果需要 Xcode 內框架包的獨立副本,請選中“需要時複製專案”,否則。否則,修改 Go 包原始碼並重新執行 gomobile bind 將會更新 hello.framework。

如果您決定將 Hello.framework 保留在主目錄中,您必須將主目錄新增到目標構建設定中的 Framework Search Paths。

您的專案佈局應如下圖所示。

在模擬器或實際裝置上構建並執行它(Cmd+R)。當應用程式啟動時,主檢視上的標籤將透過呼叫 hello.Greetings 函式的 GoHelloGreetings 返回的字串進行修改。
請注意,您也可以透過匯入 Hello 來從 Swift 呼叫 GoHelloGreetings。
@import Hello
// ...
let msg = Hello.GoHelloGreetings("gopher")
iOS 模擬器
從 Go 1.5 開始,只有 darwin/amd64 在 iOS 模擬器上可用。要使用模擬器,您需要配置 Xcode 只嘗試執行 64 位二進位制檔案。
Xcode 在 X86 模擬器上執行時會匹配 ARM 二進位制檔案的位寬。也就是說,如果您將 Xcode 配置為構建 32 位和 64 位 ARM 二進位制檔案(預設),它將嘗試在模擬器上執行 32 位 X86 二進位制檔案,這與目前的 Go 不相容。修改 Xcode 構建設定以僅構建 64 位 ARM 二進位制檔案,模擬器將執行 amd64 二進位制檔案。
此內容是 Go Wiki 的一部分。