[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上已关闭和未关闭的问题,但大多数提到的问题仍然开放且/或未解决。谷歌也帮不上什么忙,所以我希望论坛里有人能提供一些线索。

总结一下我的抱怨:

  1. gomobile被废弃了吗?
  2. 通过gomobile init -openal构建适用于arm64的openal绑定的正确方法是什么?

更多关于[gomobile] Golang移动端开发工具gomobile的当前状态与进展的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

mobile 包是一个活跃但处于实验阶段的项目(你可以在项目的 README 中了解这一点)。

GitHub

GitHub - golang/mobile: [mirror] Go on Mobile

[mirror] Go on Mobile. 在 GitHub 上创建账户,为 golang/mobile 的开发做出贡献。

项目中的提交记录(最近 21 天)

更多关于[gomobile] Golang移动端开发工具gomobile的当前状态与进展的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


gomobile 目前仍在维护,但开发活跃度较低。核心团队仍在处理关键bug和安全更新,但新功能开发基本停滞。从实际使用角度看,它处于“维护模式”而非“积极开发模式”。

关于你的具体问题:

  1. 构建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
  1. 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
  1. 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设备。

回到顶部