這裡簡單說一下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一下哦,呵呵