Go Wiki:行動裝置

Go 行動裝置子儲存庫新增了對行動裝置平台(Android 和 iOS)的支援,並提供建置行動應用程式的工具。

您可以遵循兩種策略將 Go 納入您的行動裝置堆疊

本文將包含逐步指南,說明如何達成這些策略。

工具

您需要 Go 1.16 或以上版本 才能安裝行動裝置工具。

Go Mobile 導入一個工具,gomobile,協助您進行建置和繫結程序。

gomobile 也支援 Go 模組,例如使用

$ 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 僅包含一小組套件,專注於

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 檔案到裝置來部署它們。

Deploying app bundle

或者,您可以使用 ios-deploy 工具程式命令列工具將應用程式套件部署到您的 iOS 裝置。使用 ios-deploy 將應用程式推送到您的裝置。

$ ios-deploy -b basic.app

應用程式圖示

可以透過建立 assets/icon.png 來設定應用程式圖示。

SDK 應用程式和產生繫結

在此類別中,我們將展示您如何在現有的 Android 或 iOS 應用程式中使用 Go 封裝。

遵循此策略的優點

目前的限制如下。

我們將使用 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 裝置上尚不支援。

$ 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

應用程式模組包含呼叫 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。

Drag and drop Hello.framework

如果您決定將 Hello.framework 保存在主目錄中,您必須將主目錄加入目標建置設定中的 Framework Search Paths

Framework Search Path in Xcode Project

您的專案配置應如下所示。

Xcode project layout with Hello.framework

在模擬器或實際裝置上建置並執行它(Cmd+R)。當應用程式啟動時,主視圖上的標籤會修改為從 GoHelloGreetings(呼叫 hello.Greetings 函式)傳回的字串。

請注意,您也可以透過匯入 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 的一部分。