[gomobile] Golang移动端开发工具gomobile的当前状态与进展
[gomobile] Golang移动端开发工具gomobile的当前状态与进展 你好,
我已经使用Go和gomobile构建了一个OpenGL游戏,并使其在Android上运行。但为了让一切正常工作,遇到了许多陷阱和变通方法。我仍然有一些问题需要解决。所以,首先我想知道gomobile的实际状态,如果有人了解的话。它是被遗弃了,还是仍在开发中?
我还想知道是否有人有指南,说明在使用gomobile init -openal <dir>和gomobile bind等命令时,如何让一切按预期工作。它应该与最新的NDK兼容吗?
我遇到的一些问题:
- 如果未设置ANDROID_NDK_HOME,
gomobile init会直接退出且没有任何输出。设置之后,它并没有构建我声音所需的OpenAL绑定。因此,我修改了gomobile的init.go代码并重新构建gomobile后,才成功构建了这些绑定。然而,这样构建的库只是32位的,无法在arm64上运行。所以我不得不修改cmake文件来指定-m64等参数。这是使用gcflags无法实现的。
在不修改gomobile的情况下,正确构建的确切方法是什么?
- 然后,gomobile生成的是APK,而不是Google Play商店上传应用所要求的新格式AAB。有人成功通过gomobile构建AAB吗?(在Android Studio中将APK转换为AAB也不起作用,我想这是正确的,因为据我理解,AAB基本上是一个源包)。
为了绕过APK部分并生成AAB,我尝试研究使用gomobile bind,但这同样失败了,因为它需要OpenAL,而OpenAL没有我的变通方法就无法构建。
我查看了gomobile在GitHub上已关闭和未关闭的问题,但大多数提到的问题仍然开放且/或未解决。谷歌也帮不上什么忙,所以我希望论坛里有人能提供一些线索。
总结一下我的抱怨:
- gomobile被废弃了吗?
- 通过
gomobile init -openal构建适用于arm64的openal绑定的正确方法是什么?
更多关于[gomobile] Golang移动端开发工具gomobile的当前状态与进展的实战教程也可以访问 https://www.itying.com/category-94-b0.html
mobile 包是一个活跃但处于实验阶段的项目(你可以在项目的 README 中了解这一点)。
GitHub - golang/mobile: [mirror] Go on Mobile
[mirror] Go on Mobile. 在 GitHub 上创建账户,为 golang/mobile 的开发做出贡献。
更多关于[gomobile] Golang移动端开发工具gomobile的当前状态与进展的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
gomobile 目前仍在维护,但开发活跃度较低。核心团队仍在处理关键bug和安全更新,但新功能开发基本停滞。从实际使用角度看,它处于“维护模式”而非“积极开发模式”。
关于你的具体问题:
- 构建OpenAL for arm64
当前gomobile的OpenAL构建脚本确实存在架构检测问题。以下是修正后的手动构建方法,无需修改gomobile源码:
# 设置环境变量
export ANDROID_NDK_HOME=/path/to/ndk
export GOOS=android
export CGO_ENABLED=1
# 为arm64构建
export GOARCH=arm64
go build -buildmode=c-shared -o libopenal.so ./openal
对于gomobile init,可以尝试指定目标架构:
gomobile init -target=android/arm64 -openal
如果仍然失败,建议直接使用NDK独立工具链手动编译OpenAL:
# 使用NDK构建OpenAL
$ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py \
--arch arm64 --api 21 --install-dir /tmp/android-toolchain
export PATH=/tmp/android-toolchain/bin:$PATH
./configure --host=aarch64-linux-android
make
- AAB构建支持
gomobile目前不直接支持AAB格式生成。变通方案是使用gomobile bind生成库,然后通过Android Studio或Gradle构建AAB:
// 先绑定核心逻辑
gomobile bind -target=android -o mylib.aar ./mylib
// 在Android Studio项目中:
// 1. 将mylib.aar放入app/libs/
// 2. 在build.gradle中添加:
// dependencies {
// implementation files('libs/mylib.aar')
// }
// 3. 正常构建AAB
对于游戏项目,更稳定的方案是:
- 使用gomobile bind生成C接口
- 通过JNI在Android原生项目中调用
- 用Android Studio标准流程构建AAB
- NDK兼容性
gomobile与NDK r21+存在已知兼容性问题。建议使用NDK r20b:
# 下载旧版本NDK
wget https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip
unzip android-ndk-r20b-linux-x86_64.zip
export ANDROID_NDK_HOME=$(pwd)/android-ndk-r20b
当前状态总结:
- 基础绑定功能稳定
- OpenGL/OpenAL支持有限
- 需要手动处理多架构构建
- AAB需通过Android Studio间接生成
示例:完整的arm64 OpenAL构建脚本:
#!/bin/bash
set -e
NDK=/path/to/ndk-r20b
API=21
# 构建所有支持的架构
for arch in arm64 arm x86 x86_64; do
case $arch in
arm64) target=aarch64-linux-android ;;
arm) target=armv7a-linux-androideabi ;;
x86) target=i686-linux-android ;;
x86_64) target=x86_64-linux-android ;;
esac
$NDK/build/tools/make_standalone_toolchain.py \
--arch $arch \
--api $API \
--install-dir /tmp/toolchain-$arch
export PATH=/tmp/toolchain-$arch/bin:$PATH
export CC=$target-clang
export CXX=$target-clang++
./configure --host=$target --disable-examples
make clean
make
mv libopenal.so libopenal-$arch.so
done
这种方法虽然繁琐,但能确保生成所有架构的二进制文件,兼容现代Android设备。

