首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gomobile工具链过时,仅在Android中

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

Stack Overflow用户
提问于 2017-02-26 01:37:38
回答 2查看 390关注 0票数 1

我正在使用最新的gomobile、Go和Android构建。

当我从终端运行gradle任务时,它们按照预期工作,并构建正确的二进制文件,但是在Android中,我收到一个错误:

代码语言:javascript
复制
bin/gomobile: toolchain out of date, run `gomobile init`

当然,我已经运行了很多次,但没有改变。我的假设是,Android正在使用一些我无法识别的配置。

我理解这是一个有点边缘的案例问题,但如果有人能指出正确的方向,这将是有帮助的。

./gradlew :绑定在终端中工作良好,在Android中失败。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-26 04:25:05

我已经弄清楚了这件事的真相,以防其他人有这个问题;

  1. 看起来,至少对我来说,Gradle插件并不尊重去垃圾桶的位置。相反,它查找gobin使用; := exec.LookPath("go")

我已经安装了许多Go版本(出于各种原因),所以我的强制gobin失败了。为了发现这一点,我将调试日志添加到env.go文件中。通常,在尝试调试时,文件上的日志记录并不是最清楚的。

票数 1
EN

Stack Overflow用户

发布于 2017-02-26 01:42:36

这似乎是一个移动错误消息,在cmd/gomobile/env.go#L69-L83中可以看到。

代码语言:javascript
复制
// 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会话之间反复检查GOPATH的值。

例如,请参阅这个旧的(2015年)线程以查看这些注释是否仍然适用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42463743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档