AndroidアプリでACRAを使用しています。私の質問は、クラッシュが発生した場合、クラッシュが報告される前にコードを確実に実行するにはどうすればよいかということです。つまり、クラッシュが発生したときにいくつかのカスタム変数を追加して、アプリの状態を把握したいということですか?
助けてください
ありがとうございました
hereの説明に従って、独自の送信者を実装します。既存の送信者の単なるラッパーであり、そこに送信機能を転送します。
実際にレポートを送信する前に、送信者コード内で特別なアクションを実行できます。
これは、HttpSender バックエンドで ACRA 4.5.0 を使用して私にとってうまくいったことです。Cloudant で Acralyzer を使用しています。
元のコード:
@ReportsCrashes(
mode = ReportingInteractionMode.DIALOG,
resDialogText = R.string.crash_dialog_text,
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,
formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report",
formUriBasicAuthLogin="[restricted reporter login]",
formUriBasicAuthPassword="[restricted reporter password]",
reportType = org.acra.sender.HttpSender.Type.JSON,
httpMethod = org.acra.sender.HttpSender.Method.PUT,
formKey = ""
)
public class Application extends android.app.Application {
public void onCreate() {
super.onCreate();
ACRA.init(this);
私のアプリケーションは、ログ メッセージを含むメモリ内循環バッファを保持しています。これはディスクに書き込まれません。エントリが追加されるたびにこれを文字列にレンダリングして putCustomData() を呼び出すことは特に望んでいませんでした。その代わりに、静的な「ダンパー」メソッドである VPNLog.dumpLast() を呼び出して、HttpSender.send() が実行される直前にレポートを変更します。新しいコードは次のようになります。
@ReportsCrashes(
mode = ReportingInteractionMode.DIALOG,
resDialogText = R.string.crash_dialog_text,
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,
formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report",
formUriBasicAuthLogin="[restricted reporter login]",
formUriBasicAuthPassword="[restricted reporter password]",
// reportType and httpMethod are now defined below
formKey = ""
)
public class Application extends android.app.Application {
public void onCreate() {
super.onCreate();
ACRA.init(this);
ACRA.getErrorReporter().setReportSender(
new HttpSender(org.acra.sender.HttpSender.Method.PUT,
org.acra.sender.HttpSender.Type.JSON,
null) {
@Override
public void send(CrashReportData report) throws ReportSenderException {
report.put(ReportField.APPLICATION_LOG, VPNLog.dumpLast());
super.send(report);
}
});
追加する値は長い (100 行以上) 文字列です。Acralyzer はそれを別々の番号付き行に正しく分割します。
もう 1 つのオプションは、ReportField.CUSTOM_DATA に複数のキーと値のペアを入力することです。
report.put(ReportField.CUSTOM_DATA, "key0=value0\nkey1=value1\n");
Acralyzer はこれらを HTML テーブルに表示します。