2012-01-25 3 views
2

내 app에서 sd 파일로 이동하려면 adb에서 사용할 수있는 bugreport 옵션이 필요합니다. 정상 쉘에서 bugreport를 실행할 수없고 동일한 결과를 얻으려면 dumpstate, dumpsys 및 logcat을 별도로 실행해야한다고 설명하는 Android; using exec("bugreport")을 발견했습니다. 그건 괜찮아요, 그리고 그 이해하지만, dumpstate 또는 dumpsys 파일에 쓸 수 없습니다. 아래는 logcat -d -f를 사용하여 logcat을 작성하는 데는 잘 작동하지만 다른 두 가지에는 작동하지 않습니다. dumpstate -f, dumpstate -d -f 및 dumpstate>를 사용하여 작동 시키려고했지만 파일에 아무 것도 쓰지 않습니다. 이 일을하기 위해 내가 놓친 것이 있습니까? 내가 일하고 그것을 가지고 위치파일에 dumpstate 작성하기

private void submit() { 
    try { 
     log.createNewFile(); 
     String cmd = "dumpstate "+log.getAbsolutePath(); 
     Runtime.getRuntime().exec(cmd); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 

답변

7

에 파일을 쓰고 있어요 어디는 SD 여기

File folder = new File(Environment.getExternalStorageDirectory()+"/IssueReport/"); 
    if (folder.isDirectory() == false) { 
     folder.mkdir(); 
    } 
    log = new File(Environment.getExternalStorageDirectory()+"/IssueReport/log.txt"); 

와의 파일을 만드는 오전 곳입니다
는 입니다. 나는 Running Shell commands though java code on Android?을 발견하고 그것을 필요로하는 것처럼 수정했습니다.

private void submit() { 
    try { 
     String[] commands = {"dumpstate > /sdcard/log1.txt"}; 
     Process p = Runtime.getRuntime().exec("/system/bin/sh -"); 
     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
      for (String tmpCmd : commands) { 
       os.writeBytes(tmpCmd+"\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

누구나 필요하면 여기를 모두 함께 실행하는 방법입니다. 앱에 Running Shell commands though java code on Android?을 읽고 버그 보고서를 첨부해야합니다. 버그 보고서를 실행할 방법이 없다는 것을 알았습니다. dumpstate, dumpsys 및 log의 세 가지 구성 요소 만있었습니다. 나는 각 보고서를 개별적으로 생성하고 하나의 파일로 결합하여 전자 메일에 첨부합니다.

private void submit() { 
    try { 
     String[] commands = {"dumpstate > /sdcard/IssueReport/dumpstate.txt", 
           "dumpsys > /sdcard/IssueReport/dumpsys.txt", 
           "logcat -d > /sdcard/IssueReport/log.txt", 
           "cat /sdcard/IssueReport/dumpstate.txt /sdcard/IssueReport/dumpsys.txt /sdcard/IssueReport/log.txt > /sdcard/IssueReport/bugreport.rtf" }; 
     Process p = Runtime.getRuntime().exec("/system/bin/sh -"); 
     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
      for (String tmpCmd : commands) { 
        os.writeBytes(tmpCmd+"\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace();  
     } 
+0

다음 코드 줄을 수행하십시오. Process p = Runtime.getRuntime(). exec ("/ system/bin/sh -"); 모든 로그를 함께 제공 하시겠습니까? 내가 빈 프로젝트를 만들고 submit() 메소드를 실행하면, 이전의 어플리케이션 크래시 리포트를 쓸 것인가 ?? –

관련 문제