我已经成功编写了一个 go 移动库并从一个 Android Java 应用程序中使用它。
我还成功地从 JNI 调用了 ac 函数。这个有 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也谈到了它,但下面的代码片段
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)
在 CI 中使用编译器指令解决了它:#cgo CFLAGS: -I...
但我不确定如何为 Java 做到这一点
简而言之,我现在陷入困境,希望得到帮助。理想情况下,如果可能的话,我只想将对象作为参数传递。但是,我愿意接受任何反向绑定以从 Go 调用 Java。