Android 什么表示本机方法jobject参数?

Android 什么表示本机方法jobject参数?,android,java-native-interface,Android,Java Native Interface,当从活动方法调用本机C/C++方法时,该方法的第二个参数表示什么?作为一个例子,考虑一个简单的过程,例如,在Test.CPP:中定义的过程。 void test( JNIEnv *env, jobject obj ) { } (为了简单起见,我省略了真正的方法名)。在activity类中,我可以声明本机方法,如下所示: native static void test(); 如果我从活动的onCreate()方法调用它,obj参数是否“表示”活动?obj表示对象引用,如果方法是静态的,则表示类

当从活动方法调用本机C/C++方法时,该方法的第二个参数表示什么?作为一个例子,考虑一个简单的过程,例如,在Test.CPP:

中定义的过程。
void test( JNIEnv *env, jobject obj )
{
}
(为了简单起见,我省略了真正的方法名)。在activity类中,我可以声明本机方法,如下所示:

native static void test();

如果我从活动的onCreate()方法调用它,obj参数是否“表示”活动?

obj表示对象引用,如果方法是静态的,则表示类引用。例如:

public class HelloJNI {
    static {
        System.loadLibrary("hellojni");
    }

    public native String test();
    public native static void staticTest();
}

public class JNITest extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        HelloJNI.staticTest() // jobject obj = HelloJNI.class
        HelloJNI hellojni = new HelloJNI();
        hellojni.test(); // jobject obj = hellojni
    }
}

如果该方法是静态的,则根本没有“jobect”参数,而是有“jclass”参数。@EJP,当然可以。这是第二个论点。铸造可以工作:jclass cls=(jclass)obj;