使用Golang做移动应用混合开发,Go在Android中的作用,就相当于NDK中的C/C++,gomobile就是封装了JNI调用的工具。
这里记录一下在Windows10电脑上配置Golang混合开发环境的流程(很多步骤需要通过科学上网下载)。

下载并安装go

下载地址:https://golang.org/dl/,下载最新版本(当前最新版本是1.12.5)
安装go的msi文件,安装完成后在命令提示符(cmd)中输入”go version”校验是否安装成功(go安装时会自动配置到环境变量:$GOROOT、$GOPATH、$Path)

下载安装 gomobile

在命令提示符(cmd)中输入命令:”go get golang.org/x/mobile/cmd/gomobile”,等待gomobile下载完成
输入命令:”gomobile init” (build OpenAL for Android)
安装完成后输入”gomobile version”校验是否安装成功

配置Android SDK/NDK的环境变量

使用gomobile工具前需要先配置好Android SDK/NDK的环境变量。
配置ANDROID_HOME环境变量到电脑上的Android SDK目录(会自动使用SDK目录下的ndk-bundle目录作为NDK目录,使用最新的NDK版本)
配置ANDROID_NDK_HOME环境变量到NDK目录($ANDROID_HOME和$ANDROID_NDK_HOME同时配置时,编译器会优先使用SDK/ndk-bundle目录下的NDK)

  • 未配置环境变量提示:gomobile: no Android NDK found in $ANDROID_HOME/ndk-bundle nor in $ANDROID_NDK_HOME
  • NDK版本过低提示:gomobile: No compiler for arm was found in the NDK (tried C:\Users\13927\AppData\Local\Android\sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi16-clang). Make sure your NDK version is >= r19c. Use sdkmanager --update to update it.

gomobile命令

生成apk:”gomobile build -target=android 打包相对目录”
生成aar包:”gomobile bind -target=android 打包相对目录”

Golang开发手机应用demo

Golang开发手机应用有两种方式:原生应用开发、混合绑定开发。

Golang原生应用开发示例(gomobile build命令)

(使用gomobile bind前,需要先配置Android SDK/NDK的环境变量)
在命令提示符(cmd)中输入命令:”go get -d golang.org/x/mobile/example/basic”,等待示例下载完成(下载到$GOPATH/src目录中)
生成apk安装包:”gomobile build -target=android golang.org/x/mobile/example/basic”,此命令会生成名为basic(目录名)的apk安装包(apk文件生成到命令提示符操作的目录中)
安装apk包到已连接的android设备:”gomobile install golang.org/x/mobile/example/basic” (类似于使用adb工具安装apk)

混合开发Android应用示例(gomobile bind命令)

(使用gomobile bind前,需要先配置Android SDK/NDK的环境变量)
在命令提示符(cmd)中输入命令:”go get -d golang.org/x/mobile/example/bind/…”,等待示例下载完成(下载到$GOPATH/src目录中)
生成aar包:”gomobile bind -target=android golang.org/x/mobile/example/bind/hello”,此命令会生成hello-sources.jar和hello.aar(文件生成到命令提示符操作的目录中)
导入aar包到Android工程中即可使用go中定义的相关方法

  • 打开android studio,在项目中选择菜单file/new/new Module,选择要导入的jar/aar,选中刚才创建的aar文件,项目中自动生成’:hello’ Module
  • 在需要引用Native方法的Module/build.gradle/dependencies中配置:implementation project(‘:hello’)

gomobile使用注意事项

1.目录结构:配置环境变量中GOPATH变量,go代码的工作目录是$GOPATH/src

  • go项目代码应放在$GOPATH/src目录下,并且代码中import包结构需和目录结构一致,包结构不一致则无法编译
  • gomobile build/bind 命令中的打包目录需使用相对目录(相对于$GOPATH/src),目录地址分隔符需使用”/“(不能用”\”)
  • 例如一般开源项目的包结构:$GOAPTH/src/github.com/yourname/projectname/…
  • 打包生成的文件在命令提示符(cmd)中的操作目录下
    2.Go语言混合开发时要注意下,函数必须首字母大写的才能导出,否则无法导出给移动端使用