【发布时间】:2018-05-03 22:41:32
【问题描述】:
我已经成功编写了一个 go 移动库并在一个 Android Java 应用程序中使用它。
我还成功地从 JNI 调用了一个 c 函数。这个有 JNIEnv 指针。
我想将上下文/JNIEnv 从 Java 传递给 Go。
这里看起来有点复杂:
- Go Mobile 似乎根本不使用 JNIEnv。
- LoadJNI.java 确实有一个上下文对象,并声称将其传递给 Go 端。但是那里是不可见的。
- 我已经能够使用“C”指令包含 jni.h
- 我可以从 JNI/C 传输 JNIEnv 或将其作为全局变量存储在那里,但这是一个丑陋的组合。
- https://github.com/golang/go/issues/16876 谈到了进行反向绑定的提议,但目前尚不清楚状态是什么。
- https://godoc.org/golang.org/x/mobile/cmd/gobind 也讲了不过下面的代码sn -p
import "Java/java/lang/System"
t := System.CurrentTimeMillis()
返回
cannot find package "Java/java/lang/System" in any of:
/usr/local/go/src/Java/java/lang/System (from $GOROOT)
/Users/----/go/src/Java/java/lang/System (from $GOPATH)
在 C 语言中,我使用编译器指令解决了这个问题:#cgo CFLAGS: -I...
但我不确定如何为 Java 做到这一点
简而言之,我现在陷入困境,希望得到帮助。理想情况下,如果可能的话,我只想将对象作为参数传递。但是,我愿意接受任何反向绑定来从 Go 调用 Java。
【问题讨论】:
-
gobind文档中的反向绑定代码应该使用gomobile工具编译,而不是直接使用 Go 编译器。
标签: android go jnienv gomobile