`
xitongyunwei
  • 浏览: 924355 次
文章分类
社区版块
存档分类
最新评论

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一下哦,呵呵



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics