Go Wiki:行動裝置
Go 行動裝置子儲存庫新增了對行動裝置平台(Android 和 iOS)的支援,並提供建置行動應用程式的工具。
您可以遵循兩種策略將 Go 納入您的行動裝置堆疊
- 撰寫全 Go 原生行動應用程式。
- 透過從 Go 套件產生繫結,並從 Java(在 Android 上)和 Objective-C(在 iOS 上)呼叫它們,來撰寫 SDK 應用程式。
本文將包含逐步指南,說明如何達成這些策略。
工具
您需要 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 僅包含一小組套件,專注於
- 應用程式控制和組態
- 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 中,開啟「視窗」>「裝置」。
- 從左窗格中選取實體裝置。
- 將 .app 檔案拖放到「已安裝應用程式」區段。
- 勾選「如有需要,複製項目」選項
或者,您可以使用 ios-deploy 工具程式命令列工具將應用程式套件部署到您的 iOS 裝置。使用 ios-deploy 將應用程式推送到您的裝置。
$ ios-deploy -b basic.app
應用程式圖示
可以透過建立 assets/icon.png
來設定應用程式圖示。
SDK 應用程式和產生繫結
在此類別中,我們將展示您如何在現有的 Android 或 iOS 應用程式中使用 Go 封裝。
遵循此策略的優點
- 您可以從行動應用程式重複使用 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。
- 檔案 > 匯入專案… 從 $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)。當應用程式啟動時,主視圖上的標籤會修改為從 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 的一部分。