最近需要在 android 上编写网络相关的代码,因为 golang 编写网路更加方便。所以我使用了 gomobile 将 go 编写的代码导出到 android 项目。
本次演示在 debian10 下进行,别问我为什么不用 Windows 你可以尝试一下,能不能搞过。如果你使用的是 win10 我建议里在 wsl 里进行。
装需要依赖的软件
更新源
sudo apt update
安装软件源存在的依
sudo apt install gcc default-jdk
安装 golang
golang 安装请参考 golang 安装
安装 android studio 命令行工具
访问 https://developer.android.com/studio#downloads 找到 标题为 Command line tools only
的部分选择 Linux 的下载连接点击一下并同意条款,然后即可复制下载地址。
下载 android studio 命令行工具
wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip
解压文件命令行工具
unzip commandlinetools-linux-7583922_latest.zip
将 命令行工具放入符合 Android studo 工程文件结构的目录
mkdir -p ~/Android/cmdline-tools/latest/
mv cmdline-tools/* ~/Android/cmdline-tools/latest/
rm -rf cmdline-tools/
参考资料 https://stackoverflow.com/questions/60440509/android-command-line-tools-sdkmanager-always-shows-warning-could-not-create-se https://stackoverflow.com/questions/60460429/android-studio-installs-without-sdkmanager
编辑 ~/.profile
写入以下内容,将在下次重启的时候生效。
export ANDROID_HOME="$HOME/Android"
if [ -d "$ANDROID_HOME/cmdline-tools/latest/bin" ] ; then
PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
fi
在 wsl 内 source ~/.profile
可能不会生效。
所以直接手动设置变量环境
export ANDROID_HOME="$HOME/Android"
PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
同意许可证
sdkmanager --licenses
刷新编译需要的工具
sdkmanager --update
下载 Android 依赖编译工具自己根据自己需要的工具进行下载,建议参考 Adnroid Studio File -> Settings Apperance & Behavior -> System Settings -> Android SDK -> SDK Tools 内的依赖已经你自己的 build.gradle
文件内的设置进行选择
sdkmanager "build-tools;32.0.0" "platforms;android-32" "platform-tools" "ndk-bundle"
安装 gomoblie
go install golang.org/x/mobile/cmd/gomobile@latest
创建测试项目
首先我我们创建一个 go 项目
mkdir ~/libgo && cd ~/libgo && go mod init libgo
然后创建 libgo.go
文件写入以下内容
package libgo
// SayHi 打招呼
func SayHi(name string) string{
return "Hi: " + name
}
go.mod 添加 gobild
注意哦,这个项目使用不到也不要从 go.mod 里移除,这个依赖对编译至关重要
go get -v golang.org/x/mobile/cmd/gobind
初始化 gomobile
gomobile init
gomobile 将 go 编译成 aar
gomobile bind -o libgo.aar -target=android -v
然后 将生成的 libgo.aar
导入到 Android studio 即可 libgo-source.jar
不用管这个文件没用的
导入到 android studio
将编译好的 libgo.aar
放入 android 项目 app/libs/
目录内
然后 编辑 app/build.gradle
文件在 dependencies 下添加以下内容
implementation files('libs/libgo.aar')
点击依赖同步后就可以在项目内使用我们的 go 库了,一般你写函数的时候会自动导入依赖,如果需要手动导入的话是这样
import libgo.Libgo.sayHi
没错这里 go 函数的 大写开变成小写开后了。
篇外
关于类型,java 的类型与 go 有点不同的 go 的 uint 类型无法导出。
这里我列出一些我使用过的类型,我会以 go=java的形式进行列出
int=Long
int64=Long
int32=int
string=String
go 的 struct 会被转换为 class,struct 的 field 会被自动赋予 get set 方法,然后通过 get set 操纵值