Gomobile工具链过时,仅在Android Studio中



我正在与最新的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中失败。

我已经进入了此问题的底部,以防其他人有问题;

  1. 至少对我来说,Gradle插件并不尊重Go Bin的位置。相反,它使用;

    查找Gobin
            gobin, 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)线程,以查看这些注释是否仍然适用。

相关内容

最新更新