http://blog.csdn.net/tiantang198707/article/details/11842195
不知道你代码怎么写的,仅供参考

解决方案 »

  1.   


    谢谢回复。我的代码如下。我试过得到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;  
         }  
         }
    }
      

  2.   


    谢谢回复。我的代码如下。我试过得到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的工具,你试一下,博客里有连接可以下载到源码
      

  3.   


    试了你的apk,在小米上试过,也过滤不出来各种级别的信息。是不是和Android的版本有关?