日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android core log,Android 日志系统(Logcat)的实现分析

發(fā)布時間:2025/3/12 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android core log,Android 日志系统(Logcat)的实现分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇說一下Android?日志系統(tǒng)的實現(xiàn):

1. Android中的打印分為4個緩沖區(qū)和6個打印等級,在frameworks\base\core\java\android\util\Log.java中有定義:

四緩沖:

public static final int LOG_ID_MAIN = 0;

public static final int LOG_ID_RADIO = 1;

public static final int LOG_ID_EVENTS = 2;

public static final int LOG_ID_SYSTEM = 3;

六等級:

public static final int VERBOSE = 2;

public static final int DEBUG = 3;

public static final int INFO = 4;

public static final int WARN = 5;

public static final int ERROR = 6;

public static final int ASSERT = 7;

2.Android Log打印有兩種,一種是Java層添加的,一種是C/C++代碼中添加的,如下圖:

上圖可以很容易看出,不管是java,還是C/C++,其實最終調用的driver接口都是一樣的,java只是通過了jni調用了Android框架下實現(xiàn)的Liblog本地庫,而C/C++則是直接調用的本地庫。

Andorid Log的實現(xiàn)其實是一個典型的Android框架下的APK如何進行系統(tǒng)調用到驅動的實現(xiàn)。

3.從上面的流程可以很難清晰地知道Android代碼中整個log的寫入實現(xiàn)流程,而最終log輸出最終的實現(xiàn)是/system/bin/logcat的一個工具。

其實/system/bin/logcat的實現(xiàn)也就是通過系統(tǒng)調用,讀取的/dev/log/main、/dev/log/radio、/dev/log/events、/dev/log/system四個驅動文件中的緩沖信息。

具體實現(xiàn)可以參考源碼:/system/core/logcat/logcat.cpp

4. 最后說一下Android代碼中添加打印

a. java中添加打印

import android.util.Log;

使用Log.v()、Log.d()、Log.i()、Log.w()、Log.e()

b. C/C++中添加打印

兩種方法:

第一種:

1、在Android工程的Android.mk文件中添加如下內容:

LOCAL_SHARED_LIBRARIES := liblog libutils

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

2、在JNI的實現(xiàn)代碼文件(.c或者.cpp)中加入包含LOG頭文件的如下代碼:

#include

3、在需要打印的方法中添加打印代碼,例如:

__android_log_print(ANDROID_LOG_INFO, "JniX431FileTest", "lsx_init");

// ANDROID_LOG_INFO:是日志級別;

// "JniX431FileTest":是要過濾的標簽,可以在LogCat視圖中過濾。

// "lsx_init":是實際的日志內容。

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "ProjectName", __VA_ARGS__)

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "ProjectName", __VA_ARGS__)

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO ?, "ProjectName", __VA_ARGS__)

#define LOGW(...) __android_log_print(ANDROID_LOG_WARN ?, "ProjectName", __VA_ARGS__)

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR ?, "ProjectName", __VA_ARGS__)

4、LOGV(...)、LOGD(...)、LOGI(...)、LOGW(...)、LOGE(...)?也直接使用函數(shù)__android_log_print()

第二種、使用宏ALOGV、ALOGD、ALOGI、ALOGW、ALOGE ? // 宏的實現(xiàn)在頭文件android/log.h中

例:ALOGW("%s : set OMX_IndexMstarTeePath failed!!", componentName.c_str());

總結

以上是生活随笔為你收集整理的android core log,Android 日志系统(Logcat)的实现分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。