Android 在JNI中执行Java方法--C/C++调用Java

来源:互联网 发布:中国软件测试中心 编辑:程序博客网 时间:2024/04/30 03:39

一、 在JNI中执行Java方法

class AndroidJniDemo {
private native void executeMethod();
private void show() {
System.out.println("Java cwj print"); //执行了show方法后打印java层的输出
}
public static void main(String args[]) { //这里我们在J2SE中测试,Android开发者可以放到Activity中的onCreate调用
AndroidJniDemo ajd = new AndroidJniDemo();
ajd.executeMethod();
}
static {
System.loadLibrary("AndroidJniDemo");
}
}

下面是JNI代码:

JNIEXPORT void JNICALL
Java_AndroidJniDemo_executeMethod(JNIEnv *env, jobject obj)
{
jclass clazz = (*env)->GetObjectClass(env, obj); //通过类的对象
jmethodID mid = (*env)->GetMethodID(env, clazz, "show", "()V"); //查找java中的show方法的ID,最后的签名符号为void类型
if (mid == NULL) {
return; //如果方法ID没有找到
}

printf("JNI cwj print"); //从JNI中打印输出

(*env)->CallVoidMethod(env, obj, mid); //执行show方法
}



C++的jni则这么写。因为c和c++提供的有些函数格式是不一样的。

JNIEXPORT void JNICALL
Java_AndroidJniDemo_executeMethod(JNIEnv *env, jobject obj)
{

 jclass clazz=env->GetObjectClass(obj);//通过类对象

 jmethodID mid = env->GetMethodID(clazz, "show", "()V"); //查找java中的show方法id,最后的签名符号为void类型

if (mid == NULL) {
return; //如果方法ID没有找到
}

printf("JNI cwj print"); //从JNI中打印输出

  env->CallVoidMethod(obj,mid,"()V");  //执行人show方法
}

原创粉丝点击