在android jni中使用log
开发环境:
ubuntu 10.10 + eclipse + adt +android ndk + android sdk
1、新建简单项目:JNIDemo,
设计jni到java类:
package com.lt.jni
public class JNI {/** * call the native printf method to print */public native void print();public native String sayHello();}
2、在android到bin目录下,执行命令:
javah -jni com.lt.jni.JNI 来生成头文件:com_lt_jni_JNI.h
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_lt_jni_JNI */#ifndef _Included_com_lt_jni_JNI#define _Included_com_lt_jni_JNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_lt_jni_JNI * Method: print * Signature: ()V */JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print (JNIEnv *, jobject);/* * Class: com_lt_jni_JNI * Method: sayHello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
3、在项目目录下,新建jni目录,并新建c源文件com_lt_jni_JNI.c:
#include <jni.h>#include <stdio.h>#include <string.h>#include <android/log.h>#include "com_lt_jni_JNI.h"/* * Class: com_lt_jni_JNI * Method: print * Signature: ()V */JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print (JNIEnv *env, jobject obj){__android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_print");printf("Hello world!\n");return ;}JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello (JNIEnv *env, jobject obj){__android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_sayHello");return (*env)->NewStringUTF(env,"Hello JNI");}
关键代码:#include <android/log.h>
__android_log_print(ANDROID_LOG_INFO,"TAG","log info");
4、在jni目录下新建Android.mk文件:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
com_lt_jni_JNI.c
LOCAL_CFLAGS := -O2 -g
#LOCAL_CFLAGS += -D__FAVOR_BSD
#LOCAL_C_INCLUDES += \
# bionic/libc/include\
# external/libpcap
LOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE)
#LOCAL_STATIC_LIBRARIES += libpcap
#LOCAL_SHARED_LIBRARIES += libssl libcrypto
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
#LOCAL_MODULE_TAGS := eng
LOCAL_MODULE := helloworld
include $(BUILD_SHARED_LIBRARY)
其中关键代码: LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 因为在程序中使用来log模块,所以需要指定到依赖库log
5、在console中进行到项目目录执行命令进行构建: cd $HOME/workspace/JNIDemo $NDK/ndk-build ----------------------------------------------------------------------------------------------- lql@ubuntu:~/workspace/JNIDemo$ $NDK/ndk-build Compile thumb : helloworld <= com_lt_jni_JNI.c SharedLibrary : libhelloworld.so Install : libhelloworld.so => libs/armeabi/libhelloworld.so
6、将手机和电脑连接,然后运行项目,在logcat中观察是否有日志信息输出: 09-14 17:28:32.067: INFO/JNI(6821): Java_com_lt_jni_JNI_print 09-14 17:28:32.067: INFO/JNI(6821): Java_com_lt_jni_JNI_sayHello
备注: 在使用$NDK/ndk-build进行构建到时候,如果之前构建过多次,那么最后先执行$NDK/ndk-build clean来进行清理 因为,有时,如果共享库文件已经生成,那么再次构建到时候,默认貌似不覆盖,这样导致虽然改来代码,却看不到效果, 之前还因为这个耽误来不少时间,特意记下,希望给路过到朋友一点帮助!
更多相关文章
- android 更新版本号
- Android(安卓)Studio无法启动 打开, Android(安卓)Studio gradle
- EditText弹出软件盘时不进行全屏
- Android(安卓)UID 问题 uid 改变进行了覆盖安装
- Android(安卓)Gradle 构建工具(Android(安卓)Gradle Build Tools
- SuperBrowser简单游览器Android
- android 实现根据receiver的注册状态 进行register或unregister
- Android(安卓)NDK编译libPng为静态库
- Android(安卓)AIDE入门——Hello,world,用android给Android写程