1

文档说应该支持它。似乎它没有在 gen.go 文件中实现:

case types.Uint8: // types.Byte
        return "uint8_t"
    // TODO(crawshaw): case types.Uint, types.Uint16, types.Uint32, types.Uint64:

我读到我需要修补 go mobile 以支持但是在更改文件以支持 Uint64 之后,(go/src/golang.org/x/mobile/bind/gen.go)并重新初始化 go mobile:gomobile init

同样的错误仍然出现,我在这里遗漏了一些明显的东西吗?

4

2 回答 2

0

我认为这里的问题是Java没有未签名的。因此,Java 接口不能将 uint64(和 uint32 IIRC)文件类型作为全局变量、函数返回值或函数参数。

您可以在 Go mobile 中使用 uint64。

基于上述的两个解决方案:

  1. 将非法类型暴露给 Java 的可能性降到最低
  2. 在 Go 中将 uint64 转换为 int64,在 Java 中从 long 转换为 BigInteger。
于 2017-11-20T16:55:52.700 回答
0

受 StackOverflow 帖子的启发,我通过修补 Go mobile 解决了这个问题!我非常松散地使用“补丁”,我不鼓励任何人使用此代码,因为它非常特定于目的。

我只是将案例短路default返回uint64- 你可以在这里看到我做了什么:https ://github.com/Sidetalker/mobile/commit/01eb11be69a781e71c7f00df6fc17b35f828f7a2

我需要进行一些其他的查找/替换更改,您可以在该分支上看到它以使其正确构建,并且我还必须修复我很确定是该byte类型的 Go 移动错误。所有这些都可以在分支上看到。

此外,至关重要的是,我必须完全完成go get这个项目 - 进行更改和运行gomobile init是不够的。

不要使用此代码。请将此标记为已回答。

于 2018-01-20T01:20:14.050 回答