一、 在JNI中执行Java方法

class AndroidJniDemo {
privatenativevoid 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方法
}

更多相关文章

  1. android 面试
  2. Android学习笔记•从零开始•第二天•Intent-穿梭在Activity之间
  3. android中 Button 安装监听的三种形式
  4. android 动画原理源码分析之Animation
  5. Android两种不同的方法去实现图像的放大与缩小(很有帮助)
  6. Android(安卓)Studio 找不到R文件解决方法汇总
  7. Android(安卓)JNI的基本使用(CMake)
  8. Android中Context和Resource之间的关系
  9. Mac下完全卸载干净Android(安卓)Studio的方法

随机推荐

  1. Android微信SDK API 调用教程
  2. 阿里巴巴首席战略官:阿里云要当中国Androi
  3. android开发4:布局管理器1(线性布局,相对布
  4. Android滑动的实现
  5. 理解Android进程创建流程
  6. Android 使用ViewPager实现广告条滚动
  7. Android设置Edittext只能输入字母数字弹
  8. 将Android Activity设置成对话框样式
  9. Android巴士
  10. 如何解决App无法收到android开机广播