0%

linux 安装 gomobile

最近需要在 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 操纵值