Gomobile 工具链已过时,仅在 Android Studio 中
Gomobile toolchain out of date, only in Android Studio
我正在使用最新的 gomobile、Go 和 Android Studio 版本。
当我 运行 来自终端的 gradle 任务时,它们按预期工作并构建正确的二进制文件,但是在 Android Studio 中我收到一个错误:
bin/gomobile: toolchain out of date, run `gomobile init`
当然我已经重新运行 gomobile init 很多次了,没有任何变化。我的假设是 Android Studio 正在使用一些我无法识别的配置。
我很欣赏这是一个边缘案例问题,但如果有人能指出正确的方向,那将会很有帮助。
TLDR; ./gradlew myproj:bind 在终端中工作正常,在 Android Studio 中失败。
这似乎是 gomobile 的错误信息,见于 cmd/gomobile/env.go#L69-L83
:
// Find gomobilepath.
gopath := goEnv("GOPATH")
for _, p := range filepath.SplitList(gopath) {
gomobilepath = filepath.Join(p, "pkg", "gomobile")
if _, err := os.Stat(gomobilepath); buildN || err == nil {
break
}
}
verpath := filepath.Join(gomobilepath, "version")
installedVersion, err := ioutil.ReadFile(verpath)
if !bytes.Equal(installedVersion, version) {
return nil, errors.New("toolchain out of date, run `gomobile init`")
}
因此请仔细检查本地会话和 Android Studio 会话之间 GOPATH
的值。
例如,请参阅 this old (2015) thread 以了解这些评论是否仍然适用。
我已经弄清楚了这个问题,以防其他人遇到问题;
看起来,至少对我来说,Gradle 插件没有考虑 GO bin 的位置。相反,它使用;
查找 gobin
gobin, err := exec.LookPath("go")
我安装了很多 Go 版本(出于各种原因),所以我强制 gobin 失败了。为了发现这一点,我在 env.go
文件中添加了调试日志。通常,在尝试调试时文件上的日志记录不是最清楚的。
我正在使用最新的 gomobile、Go 和 Android Studio 版本。
当我 运行 来自终端的 gradle 任务时,它们按预期工作并构建正确的二进制文件,但是在 Android Studio 中我收到一个错误:
bin/gomobile: toolchain out of date, run `gomobile init`
当然我已经重新运行 gomobile init 很多次了,没有任何变化。我的假设是 Android Studio 正在使用一些我无法识别的配置。
我很欣赏这是一个边缘案例问题,但如果有人能指出正确的方向,那将会很有帮助。
TLDR; ./gradlew myproj:bind 在终端中工作正常,在 Android Studio 中失败。
这似乎是 gomobile 的错误信息,见于 cmd/gomobile/env.go#L69-L83
:
// Find gomobilepath.
gopath := goEnv("GOPATH")
for _, p := range filepath.SplitList(gopath) {
gomobilepath = filepath.Join(p, "pkg", "gomobile")
if _, err := os.Stat(gomobilepath); buildN || err == nil {
break
}
}
verpath := filepath.Join(gomobilepath, "version")
installedVersion, err := ioutil.ReadFile(verpath)
if !bytes.Equal(installedVersion, version) {
return nil, errors.New("toolchain out of date, run `gomobile init`")
}
因此请仔细检查本地会话和 Android Studio 会话之间 GOPATH
的值。
例如,请参阅 this old (2015) thread 以了解这些评论是否仍然适用。
我已经弄清楚了这个问题,以防其他人遇到问题;
看起来,至少对我来说,Gradle 插件没有考虑 GO bin 的位置。相反,它使用;
查找 gobingobin, err := exec.LookPath("go")
我安装了很多 Go 版本(出于各种原因),所以我强制 gobin 失败了。为了发现这一点,我在 env.go
文件中添加了调试日志。通常,在尝试调试时文件上的日志记录不是最清楚的。