在android jni中使用log
2012-04-12 12:17
309 查看
开发环境:
ubuntu 10.10 + eclipse + adt +android ndk + android sdk
1、新建简单项目:JNIDemo,
设计jni到java类:
Java代码
package com.lt.jni
Java代码
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
C代码
/* 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 __cplusplus
extern "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:
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来进行清理
因为,有时,如果共享库文件已经生成,那么再次构建到时候,默认貌似不覆盖,这样导致虽然改来代码,却看不到效果,
之前还因为这个耽误来不少时间,特意记下,希望给路过到朋友一点帮助!
ubuntu 10.10 + eclipse + adt +android ndk + android sdk
1、新建简单项目:JNIDemo,
设计jni到java类:
Java代码
package com.lt.jni
Java代码
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
C代码
/* 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 __cplusplus
extern "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:
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来进行清理
因为,有时,如果共享库文件已经生成,那么再次构建到时候,默认貌似不覆盖,这样导致虽然改来代码,却看不到效果,
之前还因为这个耽误来不少时间,特意记下,希望给路过到朋友一点帮助!
相关文章推荐
- jni中出现使用LOGD,出现undefined reference to '__android_log_print错误
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
- Android jni 使用C语言调用java中的log方法
- 使用android studio JNI报错 undefined reference to '__android_log_print'
- 在android jni中使用log
- Android中JNI的使用方法
- Android Jni的简单使用详解
- 安卓 jni 开发错误 undefined reference to __android_log_print
- Android JNI 第一次使用
- Android JNI 使用的数据结构JNINativeMethod详解
- Android源码学习之如何创建使用JNI
- Android在JNI中输出输出LOG
- android调用jni使用ffmeg把h264转yuv数据
- Android 下log的使用总结
- Android之JNI动态注册native方法和JNI数据简单使用
- Android中使用javah生成jni头文件的正确方法
- Android中JNI的使用方法