2012年2月21日

【Android】Crash Reportを自動で送信するACRA

今回はAndroidがクラッシュした場合に、
自動でエラーログをDeveloperへ送信してくれる
Application Crash Report for Android
を導入したいと思います。

これを導入する事で、Google Docsにクラッシュレポートが溜まっていきます。
アプリのバージョンや、メモリー、その他もろもろの情報を取得出来るので、かなり便利です。

この記事のソースコードはGitHubにPushして起きました。

まずはjarファイルをダウンロード

zipファイルを展開して、
doc/CrashReports-Templete.csvをGoogle Docsにアップロードします。

アップロードしたらリネームしてください。
[{App名} Crash Report]とでもしておくと分かりやすいと思います。


次に、フォームの作成をします。
この時、一番下にURLが出力されているので、URLを記録しておいてください。

説明部分を適当に書いて[保存]ボタンを押します。

作成が完了したら、コーディングへ移ります。

まず、プロジェクトにlibsフォルダを作り、acraのjarファイルを移動させてください。

移動させたら、ダブルクリックでbuild-pathに通るので、ダブルクリックしてください。

次に、android.app.Applicationを拡張したクラスを作成します。

MyApplication.java

import org.acra.*;
import org.acra.annotation.*;

import android.app.Application;

@ReportsCrashes(formKey = "dGVacG0ydVHnaNHjRjVXYTEtb3FPWGc6MQ") 
public class MyApplication extends Application {
  @Override
  public void onCreate() {
    ACRA.init(this);
    super.onCreate();
  }
}
formKeyにはフォームを作成した時に記録したURLにformKey=で指定されている値を指定します。

次に、Android Manifest.xmlを修正します。

Android Manifest.xml

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:name="MyApplication">
とandroid:name属性を追加し、先程作成したApplicationクラス名を指定します。

次にpermission にINTERNETを追加してください。
<uses-permission android:name="android.permission.INTERNET"/>

これでクラッシュした場合に自動でレポートが送信されます。

試しに、ArrayIndexOutOfBoundExceptionを発生させました。

public class TestActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // ArrayIndexOutOfBoundsException
    int[] array = {1, 2, 3, 4, 5};
    int sum = 0;
    for(int i = 0; i <= array.length; i++) {
      sum += array[i];
    }
    System.out.println("sum=" + sum);
  }
}
これで、どんなレポートが来るかと言うと
こんな感じで届きました。 項目に関してはかなりたくさん取れています。 おまけ Google Docsには変更時のメール通知が出来るので 使えばさらにAndroid開発が捗ったり。

ではでは〜