Golang移动端绑定失败问题解决方案

Golang移动端绑定失败问题解决方案 你好,我是Go语言的新手。 我想从我的Go包中获取一个aar文件。 我执行了以下操作:

PS C:\Users\Cyber\a> go install golang.org/x/mobile/cmd/gobind@latest
PS C:\Users\Cyber\a> gomobile bind -target=android github.com/Cyberavater/goPlay
C:\Users\Cyber\go\bin\gomobile.exe: C:\Users\Cyber\go\bin\gobind.exe -lang=go,java -outdir=C:\Users\Cyber\AppData\Local\Temp\gomobile-work-696101797 github.com/Cyberavater/goPlay failed: exit status 1
no exported names in the package "github.com/Cyberavater/goPlay"
unable to import bind: no Go package in golang.org/x/mobile/bind
unable to import bind: no Go package in golang.org/x/mobile/bind
no exported names in the package "github.com/Cyberavater/goPlay"
no exported names in the package "github.com/Cyberavater/goPlay"
no exported names in the package "github.com/Cyberavater/goPlay"
"golang.org/x/mobile/bind" is not found; run go get golang.org/x/mobile/bind: no Go package in golang.org/x/mobile/bind

请注意,我只在Windows上安装了Go(NDK已安装),没有进行其他配置。 请尽可能详细地解释。

PS C:\Users\Cyber\a> go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Cyber\AppData\Local\go-build
set GOENV=C:\Users\Cyber\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\Cyber\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\Cyber\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.21.1
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\Cyber\AppData\Local\Temp\go-build710553425=/tmp/go-build -gno-record-gcc-switches

更多关于Golang移动端绑定失败问题解决方案的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

是的,我做到了。

更多关于Golang移动端绑定失败问题解决方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我尝试在本地运行,但我还没有安装 Android SDK。你在运行 gomobile bind 之前,有没有试过先运行 gomobile init

你的错误信息显示两个核心问题:1)包中没有导出的函数/类型,2)gomobile依赖包缺失。以下是具体解决方案:

1. 修复包导出问题 你的Go包必须导出至少一个函数或类型。创建goPlay/main.go

package goPlay

import "fmt"

// 导出函数(首字母大写)
func HelloFromGo() string {
    return "Hello from Go Mobile!"
}

// 导出结构体
type Calculator struct {
    Result int
}

func (c *Calculator) Add(a, b int) int {
    c.Result = a + b
    return c.Result
}

// 非导出函数(不会被绑定)
func internalFunc() {
    fmt.Println("This won't be exported")
}

2. 安装gomobile依赖 在Windows上需要完整安装gomobile:

// 清理并重新安装
go clean -cache
go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init

3. 设置正确的模块 确保在项目根目录初始化模块:

cd C:\Users\Cyber\a
go mod init github.com/Cyberavater/goPlay
go mod tidy

4. 完整绑定命令 使用绝对路径避免问题:

// 设置临时目录(Windows路径问题常见)
set TMP=C:\Temp
set TEMP=C:\Temp

// 执行绑定
gomobile bind -target=android -o goPlay.aar ./goPlay

5. 验证环境配置 检查NDK路径和Go模块:

// 设置NDK路径(示例路径,根据实际修改)
set ANDROID_NDK_HOME=C:\Android\ndk\25.1.8937393
set ANDROID_HOME=C:\Android\sdk

// 检查gomobile版本
gomobile version

6. 完整工作流程示例 创建完整项目结构:

// 项目结构
goPlay/
├── go.mod
├── main.go
└── build.bat

// build.bat内容
@echo off
set GO111MODULE=on
set CGO_ENABLED=1
gomobile bind -target=android -v -o goPlay.aar ./goPlay

执行绑定:

cd goPlay
go mod init github.com/Cyberavater/goPlay
go mod download golang.org/x/mobile
go get golang.org/x/mobile/bind
gomobile bind -target=android -o output.aar .

如果仍有golang.org/x/mobile/bind错误,直接下载源码:

go get -d golang.org/x/mobile
cd %GOPATH%/pkg/mod/golang.org/x/mobile@latest
go install ./cmd/gomobile
gomobile init -ndk C:\Android\ndk\25.1.8937393

7. 最小验证示例 创建最简单的可绑定包:

// minimal.go
package goPlay

func GetMessage() string {
    return "Success"
}

func AddNumbers(x, y int) int {
    return x + y
}

然后执行:

gomobile bind -target=android -v github.com/Cyberavater/goPlay

这些步骤应该能解决你的绑定失败问题。主要确保:1)有导出符号,2)gomobile依赖完整安装,3)NDK路径正确配置。

回到顶部