Android 利用JNI调用Android Java代码函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shallcheek/article/details/45912761

Java调用JJNI相信大家都会了,昨天写一个jni调用java真是被坑惨了,就不详细描述了 在此记录一下

调用步骤

1:申明引用函数Class函数

例如:

char* classname = "com/android/cofig/XXX";  //跟java的区别是.换成/
jclass clazz = (*env)->FindClass(env, classname);// 找到javaclass文件

2:寻找class里面的方法就是JAVA的方法函数 得到一个实例的域的ID

例如:

方法名 作用
GetFieldID 得到一个实例的域的ID
GetStaticFieldID 得到一个静态的域的ID
GetMethodID 得到一个实例的方法的ID
GetStaticMethodID 得到一个静态方法的ID

调用注意区分


jmethodID method = (*env)->GetMethodID(env, clazz, "test",
            "(Ljava/lang/String;)Ljava/lang/String;");
//clazz函数 test函数名 (Ljava/lang/String;)Ljava/lang/String; 这一句是定义参数借口的传递值和返回值这个方法名就是这样
public String test(String test)
{
}

//定义方法的对照表网上找的一份

类型 符号
boolean Z
byte B
char C
short S
int I
long L
float F
double D
void V
object对象 LClassName; L类名;//这个理解成String转换就成这样 Ljava/lang/String;
Arrays [array-type [数组类型

3:函数调用

例如:

//clazz为第一步定义的clazz  method方法定义的id
jstring result = (jstring)(*env)->CallObjectMethod(env, clazz, method,
            action);
// 使用CallObjectMethod方法调用方法。参数的意义: 
/**env-->JNIEnv 
//obj-->第一步定义的class
//mid--> 即第二步获得的Methodid
//action-->方法需要的参数
**/

当然CallMethod的方法很多 例调用类似
CallVoidMethod CallStaticVoidMethod
CallIntMethod CallStaticVoidMethod
CallBooleanMethod CallStaticVoidMethod
CallByteMethod CallStaticVoidMethod

推荐一个网址查看Android jni的很多函数
http://game.ceeger.com/Script/AndroidJNI/AndroidJNI.html

猜你喜欢

转载自blog.csdn.net/shallcheek/article/details/45912761