为什么捕获不到系统的log,而adb可以 http://blog.csdn.net/tiantang198707/article/details/11842195不知道你代码怎么写的,仅供参考 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢回复。我的代码如下。我试过得到root权限,好像也不行。我用的是小米开发版,4.4的public class MainActivity extends Activity { final static String FILE_NAME = "/mylog.txt";@Override protected void onCreate(Bundle savedInstanceState) { // TODO 自动生成的方法存根 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // upgradeRootPermission(getPackageCodePath()); WriteLog log = WriteLog.getInstance(); log.startLog(); //MLog.getLog();} public static class MLog //静态类//这个类从网上弄下来的 { public static void getLog() { System.out.println("sjjy--------func start--------"); // 方法启动 try { ArrayList<String> cmdLine=new ArrayList<String>(); //设置命令 logcat -d 读取日志 // cmdLine.add("adb"); cmdLine.add("logcat"); // cmdLine.add("-b"); // cmdLine.add("main"); //cmdLine.add("ActivityManager:i"); // cmdLine.add("*:i"); ArrayList<String> clearLog=new ArrayList<String>(); //设置命令 logcat -c 清除日志 clearLog.add("logcat"); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 获取SD卡的目录 File sdCardDir = Environment.getExternalStorageDirectory(); File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME); System.out.println("sjjy+++" +targetFile); // 以指定文件创建 RandomAccessFile对象 //RandomAccessFile raf = new RandomAccessFile(targetFile, "rw"); cmdLine.add("> /sdcard/mylog.txt"); } //Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[]{"adb","logcat", ">d:/c.txt"})); Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕获日志 // Process process=Runtime.getRuntime().exec(new String[] { "logcat","*:S" }); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //将捕获内容转换为BufferedReader // Runtime.runFinalizersOnExit(true); String str=null; while((str=bufferedReader.readLine())!=null) //开始读取日志,每次读取一行 { // write(str); // Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满 // System.out.println("sjjy__s"+str+"\n"); //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器.. //String s="ss"; //if(str.contains("action.DELETE")&&str.contains("net.xsmile.fv")) if(str.contains("action")) { System.out.println("sjjy--is deleting--"+str+"\n"); }else; //System.out.println("sjjy___no"); } bufferedReader.close(); } catch(Exception e) { e.printStackTrace(); } System.out.println("sjjy--------func end--------"); } } }// private static void write(String content) { try { // 如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 获取SD卡的目录 File sdCardDir = Environment.getExternalStorageDirectory(); File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME); // 以指定文件创建 RandomAccessFile对象 RandomAccessFile raf = new RandomAccessFile(targetFile, "rw"); // 将文件记录指针移动到最后 raf.seek(targetFile.length()); // 输出文件内容 raf.write(content.getBytes()); // 关闭RandomAccessFile raf.close(); } } catch (Exception e) { e.printStackTrace(); } } private String read() { try { // 如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 获取SD卡对应的存储目录 File sdCardDir = Environment.getExternalStorageDirectory(); // 获取指定文件对应的输入流 FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + FILE_NAME); System.out.println("caed"+sdCardDir.getCanonicalPath() + FILE_NAME); // 将指定输入流包装成BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(fis)); StringBuilder sb = new StringBuilder(""); String line = null; // 循环读取文件内容 while ((line = br.readLine()) != null) { sb.append(line); } // 关闭资源 br.close(); return sb.toString(); } } catch (Exception e) { e.printStackTrace(); } return null; } public static boolean upgradeRootPermission(String pkgCodePath) { Process process = null; DataOutputStream os = null; try { String cmd="chmod 777 " + pkgCodePath; process = Runtime.getRuntime().exec("su"); //切换到root帐号 os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } return true; } }} 谢谢回复。我的代码如下。我试过得到root权限,好像也不行。我用的是小米开发版,4.4的public class MainActivity extends Activity { final static String FILE_NAME = "/mylog.txt";@Override protected void onCreate(Bundle savedInstanceState) { // TODO 自动生成的方法存根 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // upgradeRootPermission(getPackageCodePath()); WriteLog log = WriteLog.getInstance(); log.startLog(); //MLog.getLog();} public static class MLog //静态类//这个类从网上弄下来的 { public static void getLog() { System.out.println("sjjy--------func start--------"); // 方法启动 try { ArrayList<String> cmdLine=new ArrayList<String>(); //设置命令 logcat -d 读取日志 // cmdLine.add("adb"); cmdLine.add("logcat"); // cmdLine.add("-b"); // cmdLine.add("main"); //cmdLine.add("ActivityManager:i"); // cmdLine.add("*:i"); ArrayList<String> clearLog=new ArrayList<String>(); //设置命令 logcat -c 清除日志 clearLog.add("logcat"); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 获取SD卡的目录 File sdCardDir = Environment.getExternalStorageDirectory(); File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME); System.out.println("sjjy+++" +targetFile); // 以指定文件创建 RandomAccessFile对象 //RandomAccessFile raf = new RandomAccessFile(targetFile, "rw"); cmdLine.add("> /sdcard/mylog.txt"); } //Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[]{"adb","logcat", ">d:/c.txt"})); Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕获日志 // Process process=Runtime.getRuntime().exec(new String[] { "logcat","*:S" }); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //将捕获内容转换为BufferedReader // Runtime.runFinalizersOnExit(true); String str=null; while((str=bufferedReader.readLine())!=null) //开始读取日志,每次读取一行 { // write(str); // Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满 // System.out.println("sjjy__s"+str+"\n"); //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器.. //String s="ss"; //if(str.contains("action.DELETE")&&str.contains("net.xsmile.fv")) if(str.contains("action")) { System.out.println("sjjy--is deleting--"+str+"\n"); }else; //System.out.println("sjjy___no"); } bufferedReader.close(); } catch(Exception e) { e.printStackTrace(); } System.out.println("sjjy--------func end--------"); } } }// private static void write(String content) { try { // 如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 获取SD卡的目录 File sdCardDir = Environment.getExternalStorageDirectory(); File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME); // 以指定文件创建 RandomAccessFile对象 RandomAccessFile raf = new RandomAccessFile(targetFile, "rw"); // 将文件记录指针移动到最后 raf.seek(targetFile.length()); // 输出文件内容 raf.write(content.getBytes()); // 关闭RandomAccessFile raf.close(); } } catch (Exception e) { e.printStackTrace(); } } private String read() { try { // 如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 获取SD卡对应的存储目录 File sdCardDir = Environment.getExternalStorageDirectory(); // 获取指定文件对应的输入流 FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + FILE_NAME); System.out.println("caed"+sdCardDir.getCanonicalPath() + FILE_NAME); // 将指定输入流包装成BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(fis)); StringBuilder sb = new StringBuilder(""); String line = null; // 循环读取文件内容 while ((line = br.readLine()) != null) { sb.append(line); } // 关闭资源 br.close(); return sb.toString(); } } catch (Exception e) { e.printStackTrace(); } return null; } public static boolean upgradeRootPermission(String pkgCodePath) { Process process = null; DataOutputStream os = null; try { String cmd="chmod 777 " + pkgCodePath; process = Runtime.getRuntime().exec("su"); //切换到root帐号 os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } return true; } }} 上面博客是我之前写的一个手机里抓取log的工具,你试一下,博客里有连接可以下载到源码 试了你的apk,在小米上试过,也过滤不出来各种级别的信息。是不是和Android的版本有关? 请问一个录音功能的实现? android 开发中使用include的遇到的问题 android sharedUserId INSTALL_FAILED_SHARED_USER_INCOMPATIBLE android 手指动作/热点记录开发或者APP推荐 用百度定位SDK创建围栏的时候报1002错误 安卓扫描pdf417报错 点击联系人跳转时怎么把这联系人传递给下一个页面 用户搜索相应资源文件 为什么Android POST 数据给PHP服务器,但PHP打印不了数据? 模拟器一进去就退出来 真机也不行 有没有这样的短信通知平台? 保存在SD卡上的音频文件怎么以byte[]形式读取?
谢谢回复。我的代码如下。我试过得到root权限,好像也不行。我用的是小米开发版,4.4的
public class MainActivity extends Activity { final static String FILE_NAME = "/mylog.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// upgradeRootPermission(getPackageCodePath());
WriteLog log = WriteLog.getInstance();
log.startLog();
//MLog.getLog();
}
public static class MLog //静态类//这个类从网上弄下来的
{
public static void getLog()
{
System.out.println("sjjy--------func start--------"); // 方法启动
try
{
ArrayList<String> cmdLine=new ArrayList<String>(); //设置命令 logcat -d 读取日志
// cmdLine.add("adb");
cmdLine.add("logcat");
// cmdLine.add("-b");
// cmdLine.add("main");
//cmdLine.add("ActivityManager:i");
// cmdLine.add("*:i");
ArrayList<String> clearLog=new ArrayList<String>(); //设置命令 logcat -c 清除日志
clearLog.add("logcat");
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
// 获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME);
System.out.println("sjjy+++" +targetFile);
// 以指定文件创建 RandomAccessFile对象
//RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
cmdLine.add("> /sdcard/mylog.txt");
}
//Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[]{"adb","logcat", ">d:/c.txt"}));
Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕获日志
// Process process=Runtime.getRuntime().exec(new String[] { "logcat","*:S" });
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //将捕获内容转换为BufferedReader
// Runtime.runFinalizersOnExit(true);
String str=null;
while((str=bufferedReader.readLine())!=null) //开始读取日志,每次读取一行
{
// write(str);
// Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满
// System.out.println("sjjy__s"+str+"\n"); //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器..
//String s="ss";
//if(str.contains("action.DELETE")&&str.contains("net.xsmile.fv"))
if(str.contains("action"))
{
System.out.println("sjjy--is deleting--"+str+"\n");
}else;
//System.out.println("sjjy___no");
}
bufferedReader.close();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("sjjy--------func end--------");
}
}
}//
private static void write(String content)
{
try
{
// 如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
// 获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME);
// 以指定文件创建 RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
// 将文件记录指针移动到最后
raf.seek(targetFile.length());
// 输出文件内容
raf.write(content.getBytes());
// 关闭RandomAccessFile
raf.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private String read()
{
try
{
// 如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
// 获取SD卡对应的存储目录
File sdCardDir = Environment.getExternalStorageDirectory();
// 获取指定文件对应的输入流
FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + FILE_NAME);
System.out.println("caed"+sdCardDir.getCanonicalPath() + FILE_NAME);
// 将指定输入流包装成BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringBuilder sb = new StringBuilder("");
String line = null;
// 循环读取文件内容
while ((line = br.readLine()) != null)
{
sb.append(line);
}
// 关闭资源
br.close();
return sb.toString();
}
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
} public static boolean upgradeRootPermission(String pkgCodePath) {
Process process = null;
DataOutputStream os = null;
try {
String cmd="chmod 777 " + pkgCodePath;
process = Runtime.getRuntime().exec("su"); //切换到root帐号
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(cmd + "\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (Exception e) {
return false;
} finally {
try {
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {
}
}
return true;
}
}
}
谢谢回复。我的代码如下。我试过得到root权限,好像也不行。我用的是小米开发版,4.4的
public class MainActivity extends Activity { final static String FILE_NAME = "/mylog.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// upgradeRootPermission(getPackageCodePath());
WriteLog log = WriteLog.getInstance();
log.startLog();
//MLog.getLog();
}
public static class MLog //静态类//这个类从网上弄下来的
{
public static void getLog()
{
System.out.println("sjjy--------func start--------"); // 方法启动
try
{
ArrayList<String> cmdLine=new ArrayList<String>(); //设置命令 logcat -d 读取日志
// cmdLine.add("adb");
cmdLine.add("logcat");
// cmdLine.add("-b");
// cmdLine.add("main");
//cmdLine.add("ActivityManager:i");
// cmdLine.add("*:i");
ArrayList<String> clearLog=new ArrayList<String>(); //设置命令 logcat -c 清除日志
clearLog.add("logcat");
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
// 获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME);
System.out.println("sjjy+++" +targetFile);
// 以指定文件创建 RandomAccessFile对象
//RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
cmdLine.add("> /sdcard/mylog.txt");
}
//Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[]{"adb","logcat", ">d:/c.txt"}));
Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕获日志
// Process process=Runtime.getRuntime().exec(new String[] { "logcat","*:S" });
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //将捕获内容转换为BufferedReader
// Runtime.runFinalizersOnExit(true);
String str=null;
while((str=bufferedReader.readLine())!=null) //开始读取日志,每次读取一行
{
// write(str);
// Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满
// System.out.println("sjjy__s"+str+"\n"); //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器..
//String s="ss";
//if(str.contains("action.DELETE")&&str.contains("net.xsmile.fv"))
if(str.contains("action"))
{
System.out.println("sjjy--is deleting--"+str+"\n");
}else;
//System.out.println("sjjy___no");
}
bufferedReader.close();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("sjjy--------func end--------");
}
}
}//
private static void write(String content)
{
try
{
// 如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
// 获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME);
// 以指定文件创建 RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
// 将文件记录指针移动到最后
raf.seek(targetFile.length());
// 输出文件内容
raf.write(content.getBytes());
// 关闭RandomAccessFile
raf.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private String read()
{
try
{
// 如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
// 获取SD卡对应的存储目录
File sdCardDir = Environment.getExternalStorageDirectory();
// 获取指定文件对应的输入流
FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + FILE_NAME);
System.out.println("caed"+sdCardDir.getCanonicalPath() + FILE_NAME);
// 将指定输入流包装成BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringBuilder sb = new StringBuilder("");
String line = null;
// 循环读取文件内容
while ((line = br.readLine()) != null)
{
sb.append(line);
}
// 关闭资源
br.close();
return sb.toString();
}
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
} public static boolean upgradeRootPermission(String pkgCodePath) {
Process process = null;
DataOutputStream os = null;
try {
String cmd="chmod 777 " + pkgCodePath;
process = Runtime.getRuntime().exec("su"); //切换到root帐号
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(cmd + "\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (Exception e) {
return false;
} finally {
try {
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {
}
}
return true;
}
}
}
上面博客是我之前写的一个手机里抓取log的工具,你试一下,博客里有连接可以下载到源码
试了你的apk,在小米上试过,也过滤不出来各种级别的信息。是不是和Android的版本有关?