1,在Android.mk文件中加上
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE :=ndkdemoLOCAL_SRC_FILES :=com_app_test_nativeMethod.cLOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -lloginclude $(BUILD_SHARED_LIBRARY)
2,在要实现的.c文件中引入头文件
#include <string.h>
#include <jni.h>#include <android/log.h>#include <stdio.h>
3,在需要输出调试信息的地方
__android_log_write(ANDROID_LOG_DEBUG,"tt","come in jin!!");
注意前面是两个下划线
4,下面直接上代码
#include <string.h>
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <jni.h> #include <android/log.h>//在logCat中加上 日志输出标记 native-activity #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__)) #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__)) /**********传输整数************* */ JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIInt( JNIEnv* env, jobject obj , jint i) { //找到java中的类 jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity"); //再找类中的方法 jmethodID mid = (*env)->GetMethodID(env, cls, "callbackInt", "(I)V"); if (mid == NULL) { LOGI("int error"); return; } //回调java中的方法 int k=0; for(k;k<10;k++){ (*env)->CallVoidMethod(env, obj, mid ,k); } } /********传输字符串************* */ JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIString( JNIEnv* env, jobject obj , jstring s) { //找到java中的类 jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity"); //再找类中的方法 jmethodID mid = (*env)->GetMethodID(env, cls, "callbackString", "(Ljava/lang/String;)V"); if (mid == NULL) { LOGI("string error"); return; } const char *ch; //获取由java传过来的字符串 ch = (*env)->GetStringUTFChars(env, s, NULL); //打印 LOGI("from java string: %s",ch); (*env)->ReleaseStringUTFChars(env, s, ch); //回调java中的方法 (*env)->CallVoidMethod(env, obj, mid ,(*env)->NewStringUTF(env,"你好haha")); } /********传输数组(byte[])************* */ JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIByte( JNIEnv* env, jobject obj , jbyteArray b) { //找到java中的类 jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity"); //再找类中的方法 jmethodID mid = (*env)->GetMethodID(env, cls, "callbackByte", "([B)V"); if (mid == NULL) { LOGI("byte[] error"); return; } //获取数组长度 jsize length = (*env)->GetArrayLength(env,b); LOGI("length: %d",length); //获取接收到的数据 int i; jbyte* p = (*env)->GetByteArrayElements(env,b,NULL); //打印 for(i=0;i<length;i++) { LOGI("%d",p[i]); } char c[5]; c[0] = 1;c[1] = 2;c[2] = 3;c[3] = 4;c[4] = 5; //构造数组 jbyteArray carr = (*env)->NewByteArray(env,length); (*env)->SetByteArrayRegion(env,carr,0,length,c); //回调java中的方法 (*env)->CallVoidMethod(env, obj, mid ,carr); } 小弟菜鸟一枚,初来乍到,有什么错误还望各位大神不吝指出,^_^。
http://www.cnblogs.com/maydow/p/4676201.html