Android JNI和NDK学习(04)--NDK调试方法
2013-05-23 17:05
483 查看
Android JNI和NDK学习(04)--NDK调试方法
本文主要介绍在ndk中添加log的方法。然后,我们就可以通过log去调试ndk。
1 添加ndk对log支持
若需要添加ndk对log的支持,只需要通过以下2步即可实现。
1.1 修改Android.mk
如生成的库文件是“.so文件”,则在Android.mk中添加如下内容:
如生成的库文件是“.a文件”,则在Android.mk中添加如下内容:
1.2 在.c或.cpp文件中引用log头文件
添加如下内容:
完成上面2步之后,我们就可以在.c/cpp文件中添加LOGI、LOGD、LOGE去打印信息!使用LOGI、LOGD、LOGE的方法和使用printf一样,如LOGD("%s\n", __func__); 作用是输出函数名。
2 ndk中log实例
下面通过实例增加log信息的方法。在“Android JNI和NDK学习(03)--动态方式实现JNI”的基础上添加log信息。
(01) 修改ndk_load.c
修改后的ndk_load.c的内容如下(红色部分为 “与log相关的内容”):
(02) 修改Android.mk
修改后的Android.mk内容如下(红色部分为 “与log相关的内容”):
(03) 重新生成.so文件,然后执行。
执行时,通过查看logcat信息,即可发现新增的log信息。如下图:
点击下载:源代码
本文主要介绍在ndk中添加log的方法。然后,我们就可以通过log去调试ndk。
1 添加ndk对log支持
若需要添加ndk对log的支持,只需要通过以下2步即可实现。
1.1 修改Android.mk
如生成的库文件是“.so文件”,则在Android.mk中添加如下内容:
LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog
如生成的库文件是“.a文件”,则在Android.mk中添加如下内容:
LOCAL_LDLIBS:=-llog
1.2 在.c或.cpp文件中引用log头文件
添加如下内容:
// 引入log头文件 #include <android/log.h> // log标签 #define TAG "hello_load" // 定义info信息 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__) // 定义debug信息 #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) // 定义error信息 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)
完成上面2步之后,我们就可以在.c/cpp文件中添加LOGI、LOGD、LOGE去打印信息!使用LOGI、LOGD、LOGE的方法和使用printf一样,如LOGD("%s\n", __func__); 作用是输出函数名。
2 ndk中log实例
下面通过实例增加log信息的方法。在“Android JNI和NDK学习(03)--动态方式实现JNI”的基础上添加log信息。
(01) 修改ndk_load.c
修改后的ndk_load.c的内容如下(红色部分为 “与log相关的内容”):
#include <stdlib.h> #include <string.h> #include <stdio.h> #include <jni.h> #include <assert.h> // 获取数组的大小 # define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0]))) // 指定要注册的类,对应完整的java类名 #define JNIREG_CLASS "com/skywang/ndk/NdkLoad" // 引入log头文件 #include <android/log.h> // log标签 #define TAG "hello_load" // 定义info信息 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__) // 定义debug信息 #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) // 定义error信息 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__) // 返回字符串"hello load jni" JNIEXPORT jstring JNICALL native_hello(JNIEnv *env, jclass clazz) { LOGI("%s info\n", __func__); LOGD("%s debug\n", __func__); LOGE("%s error\n", __func__); return (*env)->NewStringUTF(env, "hello load jni."); } // Java和JNI函数的绑定表 static JNINativeMethod method_table[] = { { "HelloLoad", "()Ljava/lang/String;", (void*)native_hello },//绑定 }; // 注册native方法到java中 static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods) { jclass clazz; clazz = (*env)->FindClass(env, className); if (clazz == NULL) { return JNI_FALSE; } if ((*env)->RegisterNatives(env, clazz, gMethods, numMethods) < 0) { return JNI_FALSE; } return JNI_TRUE; } int register_ndk_load(JNIEnv *env) { // 调用注册方法 return registerNativeMethods(env, JNIREG_CLASS, method_table, NELEM(method_table)); } JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env = NULL; jint result = -1; if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) { return result; } register_ndk_load(env); // 返回jni的版本 return JNI_VERSION_1_4; }
(02) 修改Android.mk
修改后的Android.mk内容如下(红色部分为 “与log相关的内容”):
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ndk_load LOCAL_SRC_FILES := ndk_load.c # 添加对log库的支持 LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog # 注:若生成static的.a,只需添加 LOCAL_LDLIBS:=-llog include $(BUILD_SHARED_LIBRARY) LOCAL_PATH := $(call my-dir)
(03) 重新生成.so文件,然后执行。
执行时,通过查看logcat信息,即可发现新增的log信息。如下图:
点击下载:源代码
相关文章推荐
- Android JNI和NDK学习(04)--NDK调试方法
- Android JNI和NDK学习(05)--JNI真机调试(转)
- Android JNI和NDK学习(04)--NDK调试方法(转)
- Android JNI和NDK学习(05)--JNI真机调试
- 【学习Android NDK开发】Java通过JNI调用native方法
- Android-调用本地方法计算int数值相加结果显示在界面上/NDK-JNI开发实例(三)
- Android-JNI NDK的学习记录
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android-本地方法C调用Java中的方法/NDK-JNI开发实例(六)
- Android-本地方法与Java相互调用-自定义ProgressBar(锅炉压力监测例子)/NDK-JNI开发实例(七)
- NDK开发学习笔记(2):JNI访问Java中的方法
- 【Android】Eclipse自动编译NDK/JNI的三种方法
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- NDK开发历程(一):android native code的调试方法
- 【嗨兴科技】Android 3.0.1 图解配置NDK开发环境以及Hello Word To JNI方法总结
- Android JNI和NDK学习(2)--编程入门
- Android Studio NDK环境配置及JNI使用方法
- 【Android】Eclipse自动编译NDK/JNI的三种方法
- android(NDK+JNI)---NDK入门学习
- Android JNI和NDK学习(02)--静态方式实现JNI