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 判断手机的Rom类型
  2. android 文件保存方法 sd卡中或系统
  3. 【Android】Zip文件解压方法
  4. Android显示GIF动画的几种方法
  5. Android乐动力V5.75最新获Key方法,提交步数,QQ登陆获取key案例
  6. android EditText 只能输入无法删除的解决方法
  7. Android 判断 app 是否安装的方法 (native.js)
  8. AppCompat does not support the current theme features的解决
  9. Android Bluetooth 文件接收路径修改方法

随机推荐

  1. 详解mysql数据库中文乱码问题
  2. MySQL数据文件存储位置的查看方法
  3. MySQL数据库输入密码后闪退问题的解决方
  4. 史上最简单的MySQL数据备份与还原教程(中
  5. 史上最简单的MySQL数据备份与还原教程(下)(
  6. Node.js下向MySQL数据库插入批量数据的方
  7. MySQL无法创建外键的原因及解决方法
  8. 简述Redis和MySQL的区别
  9. mysql通过find_in_set()函数实现where in
  10. sql和MySQL的语句执行顺序分析