我正在与最新的Gomobile,GO和Android Studio Builds合作。
当我从终端运行Gradle任务时,它们会按预期工作并构建正确的二进制文件,但是从Android Studio内部,我会收到一个错误:
bin/gomobile: toolchain out of date, run `gomobile init`
当然,我已经经常运行了多次的gomobile,没有变化。我的假设是Android Studio正在使用一些我无法识别的配置。
我感谢这是一个有点边缘的案例问题,但是如果有人可以将我指向正确的方向,那将是有帮助的。
tldr;./gradlew myproj:bind在终端中工作正常,在Android Studio中失败。
我已经进入了此问题的底部,以防其他人有问题;
-
至少对我来说,Gradle插件并不尊重Go Bin的位置。相反,它使用;
查找Gobingobin, err := exec.LookPath("go")
我安装了许多GO版本(出于各种原因),因此我的强迫gobin失败了。为了发现这一点,我已将调试日志添加到env.go
文件中。通常,在尝试调试时,文件上的登录并不是最清楚的。
这似乎是一条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
的值。
例如,请参见此旧(2015)线程,以查看这些注释是否仍然适用。