按照网上现有关于 gomobile 环境设置的文章操作,由于这些文章比较早,相比现在的gomobile 版本总是有各种坑。按gomobile 官网的介绍操作,还是有坑。于是将完整步骤和填坑方法,记录如下。
一、安装gomobile
当然,前提条件是go已经正确安装。在此基础上,使用下面命令安装 gomobile
go install golang.org/x/mobile/cmd/gomobile@latest
go get golang.org/x/mobile/bind
上面的第二行是下载golang.org/x/mobile/bind包,gomobile 官网的介绍中并没有提及。但是,这个是后面执行gomobile编译go程序必须的包,如果没有,则会出错。所以在这里一并获取了。
安装完成后,按照gomobile 官网的介绍,要执行下面代码初始化,看结果会生成 gobind 可执行程序。
gomobile init
这里有一个坑是,gomobile是安装到当前用户的 ~/go/bin 下了。这个目录不在PATH里,自然上面命令就执行不了。因此,在执行上述命令前,得先将 ~/go/bin 加入PATH。具体方法,就是编辑 ~/.profile 文件,在其末尾,加入下面指令
PATH=$HOME/go/bin:$PATH
然后执行下面指令,使路径设置立即生效。
source ~/.profile
二、安装配置ndk
打开 Android Studio,进入File > Settings > Languages & Frameworks > Android SDK > SDK Tools 勾选安装:CMake、 NDK。
设置环境变量。首先要设置ANDROID_HOME为你的安卓sdk路径,我的是在~/dev/sdk/Android。然后设置ANDROID_NDK_HOME,一般是在$ANDROID_HOME/ndk下,如果NDK更新过多次,这个目录下就会有多个子目录,选择最新那个就好了。我的是$ANDROID_HOME/ndk/28.0.12433566。
为避免每次都要设置,把这两个环境变量的设置写入~/.profile 文件末尾就好了。下面的设置中路径是我的,你可不要直接复制,要改成适合你的环境的路径。
export ANDROID_HOME=~/dev/sdk/Android
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/28.0.12433566
照样执行source ~/.profile,使上述设置立即生效。
三、配置java 路径
这步在Android用Java 开发的时代基本不需要,因为早就配置好了。但是,现在是Kotlin时代,没有Java的需求,自然Java路径就没有配置,所以这步也就成为按照配置gomobile环境的必须。
在Android Studio的File > Settings > Build,Execution,Deployment > Build Tools > Gradle 下,找到 Gradle JDK 的路径。我的环境下是,~/snap/android-studio/jbr
同样,在~/.profile文件最后加入
PATH=~/snap/android-studio/jbr/bin:$PATH
上面的设置中,在路径最后加入了bin,这是必须的,因为Java编译器命令在bin子目录下,我们就是要设置Java编译器的搜索路径。
四、开始编译
经过上面步骤,gomobile运行环境终于设置完成了,可以开始用go mobile 编译 go 程序为aar包了。到需要编译的go程序所在目录,执行下面命令
gomobile bind -target android
可惜,还是还出错,报错说 NDK 路径 which is unusable: unsupported API version 16 (not in 21..35)。查阅gomobile 官网 发现,官网说 gomobile 缺省会使用 Android API 版本 16。但出错信息告诉我们,gomobile已经不支持 API 版本 16了。这个坑真逗。既然你已经不支持API 版本 16,那你的缺省怎么不改呀?
没办法,只好自己动手了,在执行编译命令时,加上版本参数。
gomobile bind -target android -androidapi 28
哇,这回终于编译成功了。
得到了想要的aar包,终于可以拿到Android 程序里调用了。