[안드로이드] 쓰레드덤프 파일을 sdcard 로 꺼내는 코드

 쓰레드덤프 파일은 “/data/anr/traces.txt” 로 남게 되는데, data 폴더는 실제 폰에서 루팅을 해야만 접근을 할 수 있습니다. 그래서 폰에서도 다른 도구 없이 소스코드를 사용하여 sdcard 로 옮기기 위해서 간단히 파일 복사 코드를 만들어 보았습니다.

[code java]
package com.test;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;


import android.content.Context;
import android.os.Environment;


public class DumpCheck {


 private File mDumpFile = null;
 private final static String DUMP_FILE_PATH = “/data/anr/traces.txt”;
 
 public void checkDumpFile(Context context, boolean deleteDumpFile) throws IOException {
  if(existDumpFile() == true) {
   if(copyDumpFile(context) == true) {
    if(deleteDumpFile == true) {
     deleteDumpFile();
    }
   }
  }
 }
 
 public boolean existDumpFile() {
  if (mDumpFile == null) {
   mDumpFile = new File(DUMP_FILE_PATH);
  }
  if (mDumpFile == null) {
   return false;
  }
  return mDumpFile.exists();
 }
 
 public boolean deleteDumpFile() {
  if (mDumpFile == null) {
   mDumpFile = new File(DUMP_FILE_PATH);
  }
  if (mDumpFile == null || mDumpFile.exists() == false) {
   return false;
  }
  return mDumpFile.delete();
 }
 
 public boolean copyDumpFile(Context context) throws IOException {
  boolean result = false;
  if (mDumpFile == null) {
   mDumpFile = new File(DUMP_FILE_PATH);
  }
  if (mDumpFile == null || mDumpFile.exists() == false) {
   return false;
  }
 
  FileWriter writer = null;
  InputStream inputStream = null;
  try {
   if(mDumpFile.canRead() == false) {
    return false;
   }


   inputStream = new FileInputStream(mDumpFile);
   String fileString = “”;
   int readNum;
   byte in[] = new byte[512];
   while ((readNum = inputStream.read(in, 0, 512)) != -1) {
    fileString += new String(in, 0, readNum);
   }
   
   writer = new FileWriter(new File(Environment.getExternalStorageDirectory(), “logFile” + new Date().getTime() + “.txt”), true);
   writer.write(fileString);
   result = true;
  } catch(Exception ex) {
   ex.printStackTrace();
  } finally {
   if(writer != null) {
    writer.close();
   }
   if(inputStream != null) {
    inputStream.close();
   }
  }
  return result;
 }
}
[/code]

 코드를 추가로 수정 후에 테스트를 제대로 못해봤는데, 문제가 있다면 남겨주시길 바랍니다.



1113960844.java

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다