当前位置:编程学习 > JAVA >>

android ndk c代码调用java的代码

这里简单说一下ndk中c调用java的方法
 
 
至于ndk的环境搭建这里就不说了,有空会贴上来
 
 
java调c的感觉相对比较简单,以后有空一并贴上来,这里说下 c去回调java的代码了
 
 
首先创建工程就不说了,我们这里展开一个经典例子  helloworld  哈哈哈
 
第一步,在android工程中 建一个类,里面放个方法,syso一个helloworld。同时建议建立一个activity,这样可以放一个按钮,点击的时候可以看到效果
 
这里稍微展开下       1:写一个java方法
 
public void helloFromJava(){
 
System.out.println("helloFromJava");
}
2:写对应的native方法   
 
static{
System.loadLibrary("Hello");
 
}
 
public native void callback1();
3:实现一下调用,放在按钮中去调用,就不说啦
 
 
4:这里需要用javah实现一下C头文件的生成,当然也可以不这么做,另外的方法我就不展开了
 
 
 
 
第二部 在ndk中建立C文件啦
 
#include <jni.h>
#include "com_itheima15_ndk4_DataProvider.h"  //这个头文件由  jdk 中的javah生成,相信来看这个的,就不需要介绍javah怎么用了哦
 
//日志模块,习惯性的放一个日志模块,方便去调试
#include <android/log.h>
#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
 
 
JNIEXPORT void JNICALL Java_com_xuchulong_ndk4_DataProvider_callback1
  (JNIEnv * env, jobject obj){
//C调用java空方法
/*
* 1、 找到该方法存在哪个类中(找到存在该方法的类)
* 2、在该类中找到该方法
* 3、执行该方法
* */
char* classname = "com/xuchulong/ndk4/DataProvider";//这个是我的类名,根据自己情况放,我的helloworld就放在这个里面的
 
 
//第一步 找到该类
//  jclass      (*FindClass)(JNIEnv*, const char*);
jclass clazz = (*env)->FindClass(env, classname);
 
 
//第2步  在该类中找到该方法
// jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
// jclass 在那个类中查找
// const char* 查找的方法名称
// const char* 方法的签名     jdk   javap -s 得到方法的签名
使用方法: javap -s 包名.类名
jmethodID method = (*env)->GetMethodID(env, clazz, "helloFromJava", "()V");
 
 
//执行该方法
//void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
(*env)->CallVoidMethod(env, obj, method);
}
 
好了C代码部分完成了 ndk-build一下哦,呵呵
 
 
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,