Android
안드로이드 앱에서 로그캣 로그를 얻어오기, 로그캣 로그 지우기
StanleyKou
2015. 9. 1. 10:28
가끔, 크래쉬가 발생한 시점에 로그를 저장해야 할 경우가 있습니다.
이 시점에 로그를 얻어오려면, 아래와 같이 프로세스를 하나 띄워서 데이터를 얻어오면 됩니다.
Crash exception handler 같은 것으로 크래쉬 시점을 확인하여, 얻어온 로그캣 데이터를 저장하면 끝!
무작위 테스트하다가 죽었을 때, 좀 더 상세한 정황을 알 수 있겠죠?
private String getLogcatLog() {
StringBuilder log = new StringBuilder();
try {
Process process = Runtime.getRuntime().exec("logcat -d -v time");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
log.append("\n");
}
} catch (IOException e) {
}
return log.toString();
}
참고로, 로그를 지우려면 아래와 같이 커맨드를 날리면 됩니다.
private void clearLogcatLog() {
try {
@SuppressWarnings("unused")
Process process = Runtime.getRuntime().exec("logcat -c");
} catch (IOException e) {
}
}
이걸 응용하면 특정 시점의
- 프로세스를 얻어올 수 있습니다. (ps)
- 액티비티 목록도 얻어올 수 있습니다.(dumpsys activity)
단, 이렇게 덤프를 하려면 단말이 루팅되어 있어야 합니다.
원래는 아래 권한을 앱이 가지고 있어야 하는데, 루팅되지 않은 앱은 아래 권한을 부여해 줘도 가지고 오지 못합니다.
<uses-permission android:name="android.permission.DUMP"/>