如何在JNI编程中使用logCat
来源:互联网 发布:盛科网络上市没 编辑:程序博客网 时间:2024/06/05 10:59
首先声明,这个是转 http://blog.csdn.net/zgjxwl/article/details/6234025 这篇文章的,但是没有全摘下来,我只摘了自己需要的地方
Android NDK发布后,java+C的编程方式成为android上性能编程的首选。当然,也支持其他语言,如C++等,只要符合JNI规则即可。
在android编程java代码中,我们知道,可以使用Log.v等一些将日志输出到logcat,然后我们就可以看到日志输出信息。当然,也可以在
shell 里使用adb logcat来查看日志信息。对于java代码可以这样查看日志信息,但java调用的C函数呢,是否也可以将日志输出到logcat里呢?这就要看ANDROID NDK是否支持了。以往,在JNI编程中,调试Native Interface Method比较困难,往往都是采用打log的方式将日志输出到文件。今天,在目录
/build/platforms/android-8/arch-arm/usr/include/android/log.h
下发现android NDK提供的头文件,打开瞧瞧
/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#ifndef _ANDROID_LOG_H#define _ANDROID_LOG_H/****************************************************************** * * IMPORTANT NOTICE: * * This file is part of Android's set of stable system headers * exposed by the Android NDK (Native Development Kit) since * platform release 1.5 * * Third-party source AND binary code relies on the definitions * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. * * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES *//* * Support routines to send messages to the Android in-kernel log buffer, * which can later be accessed through the 'logcat' utility. * * Each log message must have * - a priority * - a log tag * - some text * * The tag normally corresponds to the component that emits the log message, * and should be reasonably small. * * Log message text may be truncated to less than an implementation-specific * limit (e.g. 1023 characters max). * * Note that a newline character ("/n") will be appended automatically to your * log message, if not already there. It is not possible to send several messages * and have them appear on a single line in logcat. * * PLEASE USE LOGS WITH MODERATION: * * - Sending log messages eats CPU and slow down your application and the * system. * * - The circular log buffer is pretty small (<64KB), sending many messages * might push off other important log messages from the rest of the system. * * - In release builds, only send log messages to account for exceptional * conditions. * * NOTE: These functions MUST be implemented by /system/lib/liblog.so */#include <stdarg.h>#ifdef __cplusplusextern "C" {#endif/* * Android log priority values, in ascending priority order. */typedef enum android_LogPriority { ANDROID_LOG_UNKNOWN = 0, ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */} android_LogPriority;/* * Send a simple string to the log. */int __android_log_write(int prio, const char *tag, const char *text);/* * Send a formatted string to the log, used like printf(fmt,...) */int __android_log_print(int prio, const char *tag, const char *fmt, ...)#if defined(__GNUC__) __attribute__ ((format(printf, 3, 4)))#endif ;/* * A variant of __android_log_print() that takes a va_list to list * additional parameters. */int __android_log_vprint(int prio, const char *tag, const char *fmt, va_list ap);/* * Log an assertion failure and SIGTRAP the process to have a chance * to inspect it, if a debugger is attached. This uses the FATAL priority. */void __android_log_assert(const char *cond, const char *tag, const char *fmt, ...) #if defined(__GNUC__) __attribute__ ((noreturn)) __attribute__ ((format(printf, 3, 4)))#endif ;#ifdef __cplusplus}#endif#endif /* _ANDROID_LOG_H */
请仔细阅读这个头文件,我们会发现,android NDK完全支持JNI本地方法调试。它提供4个函数供我们使用,如下
/* * Send a simple string to the log. */int __android_log_write(int prio, const char *tag, const char *text);/* * Send a formatted string to the log, used like printf(fmt,...) */int __android_log_print(int prio, const char *tag, const char *fmt, ...)/* * A variant of __android_log_print() that takes a va_list to list * additional parameters. */int __android_log_vprint(int prio, const char *tag, const char *fmt, va_list ap);/* * Log an assertion failure and SIGTRAP the process to have a chance * to inspect it, if a debugger is attached. This uses the FATAL priority. */void __android_log_assert(const char *cond, const char *tag, const char *fmt, ...)
....................
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := PerformanceTest
LOCAL_SRC_FILES := src/com_jni_AccessFiledPerformanceTest.c
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
注意:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
这句很重要
如果在上面的mk文件里没有写LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog这句,则在编译链接的时候会报错误
- 如何在JNI编程中使用logCat
- 如何在JNI编程中使用logCat
- 如何在JNI编程中使用logCat
- android 如何在JNI编程中使用logCat
- 在jni中使用Logcat
- 如何在android native编程中使用logCat
- 如何在android native编程中使用logCat
- 如何在android native编程中使用logCat
- Android JNI(3) --在C代码中使用logcat
- 如何在android C/C++ native编程(ndk)中使用logCat
- JNI中使用LOGCAT 进行Debug
- 在android C/C++ native编程(ndk)中使用logCat
- 在android C/C++ native编程(ndk)中使用logcat
- 在android C/C++ native编程(ndk)中使用logCat
- 在android C/C++ native编程(ndk)中使用logcat
- android-如何在jni中C/C++层打印log到logcat
- Android中关于JNI 的学习(五)在C文件中使用LogCat
- jni使用基础(六)之在c代码中使用logcat
- new OP 上线第二天总结:从哪里跌倒,就从哪里爬起来!
- POJ 3468 – A Simple Problem with Integers
- android培训之android下大文件分割上传(摘自达内总部)
- 黑马程序员——JAVA面向对象(一)
- GIT和SVN之间的五个基本区别
- 如何在JNI编程中使用logCat
- 懒汉模式与饿汉模式
- 删除.svn文件(windows和linux)
- get row data value& datatable filter & new datatable from datatable
- 不同语言写出来的pe文件不相同
- POJ-1860(Bellman()重要应用)
- 动态规划 - 最长公共子序列
- 【解题报告】 POJ 1611 The Suspects 并查集基础 (一点自己的感悟)
- 多分方法的再讨论