Tag: jnienv

在JNI函数(Android)之外从C调用java中的函数?

我正在尝试使用Android中的JNI从我的C代码调用Java函数,但我处于一种有点尴尬的境地。 我的C代码在传递给库的回调中的JNI函数之外执行。 这是java代码的一个例子 package com.my.java.package; class MyClass { public function handleData(byte[] data) { doSomethingWithThisData(data); } } 这是C代码的一个例子 void handleData(uint8_t *data, size_t len) { // I need to call handleData in my java // class instance from here, but i have // no access to a JNIEnv here. // I don’t think I can create one, […]

保持对JNIEnv环境的全局引用

我将JNIEnv存储在全局中,以便稍后调用静态java方法。 但是存储一个指向JNIEnv的全局指针是不是必须的,它们可以与任何其他java对象一起存储,或者它是一个不需要它的特殊情况。 JNIEnv* globalEnvPointer; [JNICALL etc] void init(JNIENv* env, [etc]) { //required? globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env); //or is this OK? globalEnvPointer = env; } 编辑 我在这里有点愚蠢,所有将使用globalEnvPointer的方法都在我的init中调用,因为我的init实际上是我的c程序的main方法,直到程序结束才会返回。 我也在c程序中没有使用其他线程。 我认为这简化了答案。 JNIEnv* globalEnvPointer; [JNICALL etc] void main(JNIENv* env, [etc]) { //required? globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env); //or is this OK? globalEnvPointer = env; someMethod(); } void someMethod() […]