Activity代码:

package com.test.jniclass;import android.app.Activity;import android.os.Bundle;public class AndroidJniClassDemo extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        executeMethod();    }        private void show(){    System.out.println("AndroidJniClassDemo show  function");    }    private int intShow(){    System.out.println("AndroidJniClassDemo intShow  function");    return 1;    }        private native void executeMethod();        static{    System.loadLibrary("AndroidJniDemo");    }

.c文件代码:

#include<jni.h>#include<stdio.h>#include<android/log.h>JNIEXPORT void JNICALL Java_com_test_jniclass_AndroidJniClassDemo_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){__android_log_print(ANDROID_LOG_INFO,"HGY", "method show ID not found");return; //如果方法ID没有找到}jmethodID intshowID = (*env)->GetMethodID(env,clazz,"intShow","()I");if(intshowID == NULL){__android_log_print(ANDROID_LOG_INFO,"HGY", "method intShow ID not found");return; //如果方法ID没有找到}    __android_log_print(ANDROID_LOG_INFO,"HGY", "will execute show function");    (*env)->CallVoidMethod(env,obj,mid); //执行show方法    __android_log_print(ANDROID_LOG_INFO,"HGY", "will execute intShow function");    (*env)->CallIntMethod(env,obj,intshowID); //执行show方法}

首先说下有关签名sig相关的比如 "Ljava/lang/String;"
1. jmethodID GetMethodID(JNIEnv *env, jclass clazz,const char *name, const char *sig); 获取一个Java方法的ID
这个函数将返回非静态类或接口实例方法的方法 ID。这个方法可以是某个clazz 的超类中定义,也可从clazz 继承,最后一个参数为签名,最后两个参数是const char*类型,是utf8类型。需要注意的是执行GetMethodID()函数将导致未初始化的类初始化,如果要获得构造函数的方法ID,使用 <init> 作为方法名,同时将 void (V) 作为返回类型,如果找不到指定的ID将返回NULL,同时异常可能有:
(1 NoSuchMethodError 找不到指定的Java方法。
(2 ExceptionInInitializerError 如果由于异常而导致类初始化程序失败
(3 OutOfMemoryError 内存不足

对于最后一个参数编码签名 下篇继续

更多相关文章

  1. Android显示GIF动画的几种方法
  2. Android文字跑马灯控件(文本自动水平滚动)
  3. android:onClick attribute
  4. android 文件保存方法 sd卡中或系统
  5. 一些常用SD卡操作的方法,APk管理之类的方法
  6. Android(安卓)Support Multidex原理分析
  7. android 图片叠加效果实现
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)单元测试
  2. android webview自带下载
  3. Android(安卓)PULL解析XML
  4. android怎样在布局文件监听事假
  5. Android(安卓)文件工具FileUtil
  6. Android(安卓)Media Scanner Mechanism A
  7. 【android】两个按钮的宽度各占屏幕的一
  8. 智能手机软件平台 Android(安卓)VS iPhon
  9. android 数据库
  10. Android(安卓)自定义对话框