你的位置:首页 > 软件开发 > 操作系统 > Android C代码回调java方法

Android C代码回调java方法

发布时间:2016-07-02 19:00:05
本文将讲述下列三种C代码回调java方法1、c代码回调java空方法2、c代码回调java int类型参数方法3、c代码回调javaString类型参数方法方法都差不多,先看c代码回调java空方法,其他两种类似:① 找到字节码对象 //jclass (*FindClass) ...

Android C代码回调java方法

本文将讲述下列三种C代码回调java方法

1、c代码回调java空方法

2、c代码回调java int类型参数方法

3、c代码回调javaString类型参数方法

方法都差不多,先看c代码回调java空方法,其他两种类似:

① 找到字节码对象 

//jclass (*FindClass)(JNIEnv*, const char*);

//第二个参数 要回调的java方法所在的类的路径 "com/itheima/callbackjava/JNI"

② 通过字节码对象找到方法对象

//jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);

第二个参数 字节码对象 第三个参数 要反射调用的java方法名 第四个参数 要反射调用的java方法签名

javap -s 要获取方法签名的类的全类名 项目/bin/classes 运行javap

Android C代码回调java方法

③ 通过字节码创建 java对象(可选) 如果本地方法和要回调的java方法在同一个类里可以直接用 jni传过来的java对象 调用创建的Method

jobject obj =(*env)->AllocObject(env,claz);

当回调的方法跟本地方法不在一个类里 需要通过刚创建的字节码对象手动创建一个java对象

再通过这个对象来回调java的方法

需要注意的是 如果创建的是一个activity对象 回调的方法还包含上下文 这个方法行不通!!!回报空指针异常

④ 反射调用java方法

//void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);

第二个参数 调用java方法的对象 第三个参数 要调用的jmethodID对象 可选的参数 调用方法时接收的参数

接下来实战项目实现

新建项目,布局如下:

<LinearLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context=".MainActivity" >  <Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:onClick="callbackvoid"    android:text="回调null方法" />  <Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:onClick="callbackint"    android:text="回调int参数方法" />  <Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:onClick="callbackString"    android:text="回调String参数方法" /></LinearLayout>

原标题:Android C代码回调java方法

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。