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-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 操纵值