Edited at

ACRAを使ってクラッシュレポートをメールで受け取る

More than 5 years have passed since last update.


ACRAについて

ACRAはAndroidのアプリが強制終了した時のクラッシュレポートを収集するためのライブラリです。

本来は自動収集する使い方が普通なのですが、以前の方式(Google Docs上にレポートを集める)は利用できないようになっています。

今の方式はバックエンドのサーバを用意して、Acralyzer(ACRAのバックエンドアプリケーション)を走らせて、そこに集めるようです。

今回はさくっと使いたかったので、メールでレポートを集める方法を選択肢ました。


ACRAの導入


ライブラリのダウンロード

ここからACRAのライブラリがダウンロードできます。


ライブラリをプロジェクトに追加

ダウンロードしたZipファイルを解答して/build/acra-4.x.0.jarをプロジェクトの/libsにコピーします。


ApplicationクラスでACRAを初期化

ACRAはApplicationクラスを継承したクラスで初期化します。

いきなりメール送信画面が現れるのは不親切なので、確認ダイアログを表示するようにします。


MyApplication.java

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に文字列を追加します。


strings.xml

<string name="acra_dialog_title">クラッシュレポート</string>

<string name="acra_dialog_text">予期せぬエラーが発生しました。アプリを終了します。\nクラッシュレポートを送信しますか?</string>
<string name="acra_dialog_comment_prompt">発生状況を教えてください。</string>

AndroidManifest.xmlに定義を追加します。


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で自動収集する方式も試してみたい。