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

歡迎訪問 生活随笔!

生活随笔

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

Android

android /data/system/dropbox,Android导出dropbox日志

發布時間:2024/9/27 Android 201 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android /data/system/dropbox,Android导出dropbox日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章內容已重新排版:Android導出dropbox日志,請到該鏈接瀏覽,謝謝支持。

大項目中出現anr幾乎是必然事件,這里我就不再去贅述怎么分析anr日志了。但是作為分析anr重要依據的必然離不開dropbox日志。

問題來了,dropbox文件目錄路徑一般是/data/system/dropbox/,開發時我們當然能直接把日志拉出來。但是,外面用的正式版的機器我們是沒有讀取這個目錄的權限的,即使你擁有系統權限也不行。所以想著怎么在程序中直接把dropbox日志直接輸出來。

后來找到android了一個跟dropbox日志緊密聯系的類:DropboxManager.

DropboxManager中文介紹可以參考這篇博客:DropboxManager介紹

第一步:獲取DropboxManager

api英文原文是:You can obtain an instance of this class by calling {@link android.content.Context#getSystemService} with {@link android.content.Context#DROPBOX_SERVICE}.代碼:

```

DropboxManager dropboxManager = (DropboxManager?) mContext.getSystemService(Context.DROPBOX_SERVICE);

```

第二步:獲取dropbox信息

DropboxManager中有一個類Entry,該Entry在api中的定義是:A single entry retrieved from the drop box. 通過這個Entry我們就可以獲取到dropbox的日志信息(嘿嘿,開心)。

其實說明白點就是:每個Entry對應的就是一個tag的系統日志(上面推薦博客中介紹到的tag,如crash,anr,strict_mode等等)。既然重點都在這個Entry上,那我們來理一理它。首先看他的參數。

其中我們要用到的就是前面三個:mTag對應的就是我們上說的系統日志的tag;mTimeMillis對應的是Entry創建的時間,這個我們后面會用到,必要參數;mData中包含的就是我們要的數據了。

那么我們怎么獲取Entry呢?不急,DropboxManager中給你提供了方法:getNextEntry(String tag, long msec)。其中tag上面說的很詳細了,傳null代表所有tag;msec代表系統這個時間點后創建的Entry。所以這個方法獲取到的就是指定tag、指定時間點后創建的第一個Entry。

好了,Entry我們已經獲取到了,接下來說說怎么從Entry獲取我們需要的日志信息。Entry類中有一個方法是String getText(int maxBytes),直接返回的就是String,深得我心啊。就是說你直接就可以獲取到對應entry中的日志信息了。具體是怎么實現的我就不說了,去看api,很簡單。

接下來你只需要對這個String進行操作就行了,可以寫到本地文件中,也可以打印到普通日志中。看你喜歡。下面貼一下我的完整代碼

```

import android.content.Context;

import android.os.DropBoxManager;

import android.os.Environment;

import android.util.Log;

import java.io.IOException;

public class DropboxOutputManager {

private static final StringTAG ="DropboxPrintManager";

private static final int MAX_BYTES =8192 *100;

// DropBoxManager 是 Android 在 Froyo(API level 8) 引入的用來持續化存儲系統數據的機制,

// 主要用于記錄 Android 運行過程中, 內核, 系統進程, 用戶進程等出現嚴重問題時的 log,

// 可以認為這是一個可持續存儲的系統級別的 logcat.

private DropBoxManagerdropBoxManager;

/**

* [dropbox文件生成路徑]

*/

private StringoutputPath = Environment.getExternalStorageDirectory().getPath() +"/log/dropbox.log";

private static DropboxOutputManagersInstance;

private DropboxOutputManager() {

//通過用參數 DROPBOX_SERVICE 調用 getSystemService(String) 來獲得這個服務

dropBoxManager = (DropBoxManager) mContext.getSystemService(Context.DROPBOX_SERVICE);

}

public static DropboxOutputManagergetInstance() {

if (sInstance ==null) {

synchronized (DropboxOutputManager.class) {

if (sInstance ==null) {

sInstance =new DropboxOutputManager();

}

}

}

return sInstance;

}

/**

* 打印日志信息

*/

public boolean printDropboxLog()throws IOException {

// 我們要輸出所有的dropbox信息,所以時間點從0開始

long time =0;

String text ="";

DropBoxManager.Entry entry;

while ((entry = getEntry(time)) !=null) {

//這里給它加個標簽

text = entry.getTag() +"? " + entry.getText(MAX_BYTES) +"\r\n";

time = entry.getTimeMillis();

//直接打印出來,當然你可以在這里把text寫到文件中去

Log.d("whh", text);

// 這里一定要記得關閉

if (entry !=null) {

entry.close();

}

}

return true;

}

/**

* 獲取指定時間點后的第一個entry,不指定tag

*/

private DropBoxManager.EntrygetEntry(long time) {

// 需要在AndroidManifest中增加android.permission.READ_LOGS權限

DropBoxManager.Entry entry =dropBoxManager.getNextEntry(null, time);

return entry;

}

}

```

總結

以上是生活随笔為你收集整理的android /data/system/dropbox,Android导出dropbox日志的全部內容,希望文章能夠幫你解決所遇到的問題。

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