バグ報告システムでLogCatを送信する

注意
公開当時はありませんでしたが、現在はDeveloper consoleでエラーログを見ることができるので、通常はそちらを利用することをオススメします。本機能を実装する場合は、READ_LOGSパーミッションが情報漏洩に繋がる(ログに個人情報を出力するほうが問題なのですが、、、)ことを危惧するユーザもいると言うことを考慮に入れることをオススメします。

バグ報告システム

adamrocker氏が開発した、Androidアプリのバグ報告システムがあります。

ポイントはこのへん。

  • catchされないexceptionが発生した場合にstacktraceをSDカードにファイル保存
    • Thread.setDefaultUncaughtExceptionHandler()を使う
  • 次回起動時にサーバに送信
  • サーバはGAEで、バグレポートを受け取るとメール送信

詳細はこちら。
http://www.adamrocker.com/blog/288/bug-report-system-for-android.html


これ、出力がstacktraceになってるんだけど、LogCatの方が分かりやすいよね、ってことでLogCatをレポートするように変更しました。

LogCatをプログラムから出力する方法

LogCatはAndroid端末からならlogcatコマンドで出力できるので、自分が欲しい条件をオプションで指定してプログラムから呼べばいいだけ。

logcatのオプションはヘルプを参照。

adb logcat -h

プログラムからコマンドラインを呼ぶには

Runtime.getRuntime().exec();

を使えばOK.

ここに詳しく書かれてます。
Androidアプリケーションからlogcatコマンドを実行する - Android Wiki*

LogCat送信サンプルプロジェクト

ということで、AdamrokerさんのコードをもとにLogCatを送信するよう変更したプロジェクトをgithubにアップしました。
GitHub - itog/BugReporter: Bug report function

サーバサイドはhttp://www.adamrocker.com/blog/288/bug-report-system-for-android.htmlに載ってる情報そのままで、
BUG_REPORT_SERVERでデプロイしたGAEのURLを指定するだけで使えます。

コピペするときは、下記パーミッションを忘れずに。



最初、もうちょっと汎用的にしようと思ったけど、1アプリにつき1回だけコピペすればいいだけなので、これで十分かなぁ。