最近需要在 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-6858069_latest.zip
解压文件命令行工具
unzip commandlinetools-linux-6858069_latest.zip
将 命令行工具放入符合 Android studo 工程文件结构的目录
mkdir -p ~/Android/cmdline-tools/latest/
mv cmdline-tools/* ~/Android/cmdline-tools/latest/
参考资料 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;30.0.3" "platforms;android-30" "platform-tools" "ndk-bundle"
安装 gomoblie
go get -u -v golang.org/x/mobile/cmd/gomobile
初始化 gomobile
gomobile init
编译 base.APK
gomobile build -target=android golang.org/x/mobile/example/basic
将 go 导出 android
我可以使用 gomobile 将 go 编译成 aar 以供 java 调用
首先我我们创建一个 go 项目
mkdir ~/lobgo && cd ~/libgo && go mod init libgo
然后创建 libgo.go
文件写入以下内容
package libgo
// SayHi 打招呼
func SayHi(name string) string{
return "Hi: " + name
}
然后使用 gomobile 将 go 编译成 aar
gomobile bind -o libgo.aar -target=android -v
然后 将生成的 libgo.aar
导入到 Android studio 即可 libgo-source.jar
不用管这个文件没用的
导入到 android studio
打开我们的项目 然后点击 File -> New -> New Module -> Import .JAR/.AAR
然后选择我们刚才生成的 libgo.aar
(具体里怎么把 libgo.aar
这个文件弄回来这里不进行讲解),等 android studio 导入完成后 会在 app
目录下生成 libgo
目录,目录下就是 libgo.aar
文件。
然后 编辑 app/build.gradle
文件在 dependencies 下添加以下内容
implementation project(":libgo")
然后即可在项目导入我们的 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 操纵值