开淘宝的店铺网站怎么做,广州网站运营专注乐云seo,wordpress 多个边栏,佛山做网站建设文章内容已重新排版#xff1a;Android导出dropbox日志#xff0c;请到该链接浏览#xff0c;谢谢支持。大项目中出现anr几乎是必然事件#xff0c;这里我就不再去赘述怎么分析anr日志了。但是作为分析anr重要依据的必然离不开dropbox日志。问题来了#xff0c;dropbox文件…文章内容已重新排版Android导出dropbox日志请到该链接浏览谢谢支持。大项目中出现anr几乎是必然事件这里我就不再去赘述怎么分析anr日志了。但是作为分析anr重要依据的必然离不开dropbox日志。问题来了dropbox文件目录路径一般是/data/system/dropbox/,开发时我们当然能直接把日志拉出来。但是外面用的正式版的机器我们是没有读取这个目录的权限的即使你拥有系统权限也不行。所以想着怎么在程序中直接把dropbox日志直接输出来。后来找到android了一个跟dropbox日志紧密联系的类DropboxManager.DropboxManager中文介绍可以参考这篇博客DropboxManager介绍第一步获取DropboxManagerapi英文原文是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如crashanrstrict_mode等等)。既然重点都在这个Entry上那我们来理一理它。首先看他的参数。其中我们要用到的就是前面三个mTag对应的就是我们上说的系统日志的tagmTimeMillis对应的是Entry创建的时间这个我们后面会用到必要参数mData中包含的就是我们要的数据了。那么我们怎么获取Entry呢不急DropboxManager中给你提供了方法getNextEntry(String tag, long msec)。其中tag上面说的很详细了传null代表所有tagmsec代表系统这个时间点后创建的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;}}