ACRAについて
ACRAはAndroidのアプリが強制終了した時のクラッシュレポートを収集するためのライブラリです。
本来は自動収集する使い方が普通なのですが、以前の方式(Google Docs上にレポートを集める)は利用できないようになっています。
今の方式はバックエンドのサーバを用意して、Acralyzer(ACRAのバックエンドアプリケーション)を走らせて、そこに集めるようです。
今回はさくっと使いたかったので、メールでレポートを集める方法を選択肢ました。
ACRAの導入
ライブラリのダウンロード
ここからACRAのライブラリがダウンロードできます。
ライブラリをプロジェクトに追加
ダウンロードしたZipファイルを解答して/build/acra-4.x.0.jarをプロジェクトの/libsにコピーします。
ApplicationクラスでACRAを初期化
ACRAはApplicationクラスを継承したクラスで初期化します。
いきなりメール送信画面が現れるのは不親切なので、確認ダイアログを表示するようにします。
import org.acra.*;
import org.acra.annotation.*;
@ReportsCrashes(
formKey = "", // Google DocsのformKeyの設定なので空文字
mailTo="<YOUR_EMAIL_ADDRESS>",
mode=ReportingInteractionMode.DIALOG, // Dialogを表示
resDialogTitle=R.string.acra_dialog_title, // Dialogのタイトル
resDialogText=R.string.acra_dialog_text, // Dialogのテキスト
resDialogCommentPrompt=R.string.acra_dialog_comment_prompt // 発生状況を入力する欄のラベル
)
public class MyApplication extends Application {
@Override
public void onCreate() {
// The following line triggers the initialization of ACRA
super.onCreate();
ACRA.init(this);
}
}
strings.xmlに文字列を追加します。
<string name="acra_dialog_title">クラッシュレポート</string>
<string name="acra_dialog_text">予期せぬエラーが発生しました。アプリを終了します。\nクラッシュレポートを送信しますか?</string>
<string name="acra_dialog_comment_prompt">発生状況を教えてください。</string>
AndroidManifest.xmlに定義を追加します。
<manifest ...>
<application ... android:name="MyApplication">
...
<activity
android:name="org.acra.CrashReportDialog">
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
</manifest>
MyApplicationクラスの設定とINTERNETパーミッションの追加します。
また表示されるDialogはDialogテーマのActivityとして実装されているので、タグでの宣言が必要です。
ACRAの導入は以上です。
とりあえずメールで送信するぐらいだったらサクッと導入できます。
メールで送信するとこんなかんじで届きます。
USER_COMMENT=強制終了した!
ANDROID_VERSION=4.4.2
APP_VERSION_NAME=1.0
BRAND=google
PHONE_MODEL=Nexus 5
CUSTOM_DATA=
STACK_TRACE=java.lang.ArrayIndexOutOfBoundsException: length=0; index=1
...
余裕できたら、Acralyzerで自動収集する方式も試してみたい。