web-dev-qa-db-ja.com

Android logcat:メールを使用してデバイスからログエントリを送信します

シナリオ

Androidアプリのベータ版をいくつかの友人にリリースしました。今、テスト期間中に発生したいくつかのバグを修正したいと思います。

サードパーティのクラッシュレポートユーティリティを設定したので、アプリのクラッシュを簡単に処理できます。ただし、クラッシュを引き起こしていないいくつかの誤った動作があります。このような場合は、アプリのログを調べて、問題の原因を確認したいと思います。

アプリがlogcatエントリをメールで送信する方法はありますか?

明確化

  • 多くのロギングアプリ( Android-log-collectorLog Viewer(logcat) )があり、logcatエントリを検査して表示できます。ただし、Android 4.1以降、これらのアプリは他のアプリのログにアクセスできません。
  • デバイスで多くのスペースを取ってもかまいません。この機能はベータテスター専用です。
  • ソリューションは、rootまたはその他の特別な権限がなくても機能するはずです。
26
Adam Matan

メインアクティビティのonDestroyでこのメソッドを呼び出します。

 public void SendLogcatMail(){

    // save logcat in file
    File outputFile = new File(Environment.getExternalStorageDirectory(),
            "logcat.txt");
    try {
        Runtime.getRuntime().exec(
                "logcat -f " + outputFile.getAbsolutePath());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 //send file using email
 Intent emailIntent = new Intent(Intent.ACTION_SEND);
 // Set type to "email"
 emailIntent.setType("vnd.Android.cursor.dir/email");
 String to[] = {"[email protected]"};
 emailIntent .putExtra(Intent.EXTRA_EMAIL, to);
 // the attachment
 emailIntent .putExtra(Intent.EXTRA_STREAM, outputFile.getAbsolutePath());
 // the mail subject
 emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject");
 startActivity(Intent.createChooser(emailIntent , "Send email..."));
 }
26

RemoteLoggerはまさに必要なもののようです

https://github.com/sschendel/RemoteLogger

ユーザーがメールで簡単に送信できるファイルにデバッグログをキャプチャします。これは、ユーザーから報告された再現性のないバグをトラブルシューティングするために作成されました。明確にするために、ログはリリースされたアプリのバージョンにドロップされ、ユーザーのトラブルシューティングをテストしました。最終的な製品コードで削除されました。

ライブラリは、ログファイルを開始、停止、送信、および削除するフックを提供します。

0