ACRAとCloudantを使用した自動Androidクラッシュレポート
公開: 2022-03-11基本的なAndroidアプリの作成は簡単です。 一方、信頼性が高く、スケーラブルで堅牢なAndroidアプリを作成することは、非常に困難な場合があります。
多数の異なるメーカーから数千の利用可能なデバイスが送り出されているため、1つのコードが電話間で確実に機能すると仮定すると、せいぜいナイーブです。
セグメンテーションはオープンプラットフォームを持つための最大のトレードオフであり、アプリが本番段階を通過した後も長く続くコードメンテナンスの通貨で価格を支払います。
Androidエラーレポートが重要な理由
では、Androidアプリがクラッシュしたり、応答しなくなったりするとどうなりますか? さて、「強制終了」ダイアログがポップアップし、何かがうまくいかなかったことをユーザーに知らせます。 アプリがGooglePlayからダウンロードされた場合、ユーザーは、あなた(開発者)が表示できる詳細なAndroidクラッシュレポート(時間、電話モデル、Androidバージョン、スタックトレースなどを含む)を送信してクラッシュを報告するように求められます。開発者用コンソール。原因のバグに対処できます。
これはすべて非常に良いように聞こえますが、Androidのデフォルトのエラーレポートの使用には大きな問題があります。ユーザーはアプリがクラッシュしたときにアクションを実行しない傾向があります。 実際、大多数はAndroidエラーレポートを送信しないことを選択しています。 では、良心的な開発者として、アプリのクラッシュと失敗について信頼できる洞察を得るにはどうすればよいでしょうか。
ACRAの紹介
ACRAは、「Android向け自動クラッシュレポート」の略です。 これは、数行のコードで「手動エラー報告」の問題を解決できる無料のライブラリです。 ライブラリを実装し、すべてが適切に初期化されると、ユーザーがアクションを実行しなくても、Googleのデフォルトと同じAndroidエラーログ(および追加された多数のカスタマイズオプション)を自動的に抽出できるようになります。
さらに、ACRAでは、Androidのクラッシュをユーザーに通知する方法を選択できます。デフォルトでは、サイレントバックグラウンドレポートと、カスタマイズされたダイアログを含む代替手段があります。
最近まで、ACRAはGoogleスプレッドシートに支えられていました。つまり、Googleドライブアカウントで無料でホストされているすべてのレポートを1つのファイルで受け取ることができました。 残念ながら、Googleは今後このオプションを使用しないように要求したため、クラッシュレポートデータを送信するためのいくつかの選択肢が残されています。そのうちのいくつかについては、このチュートリアルで説明します。
- 標準の電子メール(ユーザーの操作が必要です)。
- カスタム電子メール/HTTPクライアント(大規模なセットアップが必要です)。
- カスタムバックエンド(無料から商用ソリューションまでのオプション付き)。
この記事では、これらのソリューションの1つを分析します。CloudantバックエンドでACRAレポートをホストし、acralyzerでデータを視覚化します。
Cloudantバックエンドのセットアップ
最初に行う必要があるのは、Cloudantアカウントを登録することです。 もちろん、落とし穴があります。Cloudantのサービスは完全に無料ではありませんが、価格設定ページによると、月額5ドルの制限を超える可能性はほとんどありません(コードに膨大なユーザーベースと大量のバグがない限り)。
登録したら、物事がどのように機能するかを理解する必要があります。 大まかに言えば、バックエンドは2つのコンポーネントで構成されます。
- ストレージデータベース、より正確にはApacheCouchDB。 CouchDBはデータをJSON形式で保存します。つまり、Androidデバイスから送信されるすべてのレポートは、エントリとして挿入されるために形式と一致する必要があります。 データベース挿入は、単純なHTTPPOSTまたはPUTリクエストです。
- Webアプリ(分析用)、より正確にはCouchApp。 これは、クエリを実行し、CouchDBインスタンスに格納されているデータを表示できるシンプルなJavaScriptアプリケーションです。
バックエンドが正しく機能するためには、これら2つのコンポーネントをセットアップする必要があります。 理論的には、データベースとアプリをソースから構築し、ツールを使用してそれらをバックエンドにデプロイすることができますが、ACRAの優秀な人々はすでにそれを行っています。 したがって、最も簡単なアプローチは、リモートデータベースとリモートアプリを複製することです。
先に進んで、空のACRACouchDBを複製しましょう。
- Cloudantダッシュボードの[レプリケーション]セクションを選択します。
- ソースデータベースとして、URLとしてhttp://get.acralyzer.com/distrib-acra-storageを使用して「リモートデータベース」を選択します。
- ターゲットデータベースとして、[新しいデータベース]を選択し、「acra- {myapp}」という名前を付けます(引用符は含みません)。 {myapp}パラメータはアプリに固有である必要があり、データベース名は「acra-」で始まる必要があることに注意してください。
- [複製]をクリックします。
したがって、レポートを保存するためにデータベースを正常に複製できました。 次に、データを視覚化できるように、acralyzerCouchAppを複製する必要があります。
- Cloudantダッシュボードの[レプリケーション]セクションを選択します。
- ソースデータベースとして、URLとしてhttp://get.acralyzer.com/distrib-acralyzerを使用して「リモートデータベース」を選択します。
- ターゲットデータベースとして、[新しいデータベース]を選択し、「acralyzer」という名前を付けます。
- [複製]をクリックします。
注:acralyzerアプリの複製はオプションです。 データを視覚化するのではなく、Androidクラッシュレポートの保存のみに関心がある場合は、このデータは必要ありません(このAndroidチュートリアルの次のセクションでacralyzerについて詳しく見ていきます)。 JavaScriptのスキルに十分な自信がある場合は、独自の分析アプリを作成することもできます。 しかし、それはこのブログ投稿の範囲外です。
初期設定プロセスの最後のステップは、セキュリティ権限を追加することです。 Cloudantは、CouchDB上に独自のセキュリティレイヤーを提供し、個々の権限をより細かく制御できるため、データベースにレポートを書き込むには、書き込み権限を持つユーザーアカウントを作成する必要があります。
- Cloudantダッシュボードの[データベース]セクションを選択します。
- acra- {myapp}データベースの権限セクション(ロックアイコン)をクリックします。
- [APIキーの生成]をクリックします。
- 生成されたユーザー名とパスワードを書き留めます(後で使用します)。
- 生成されたユーザー名の書き込み権限を追加します。
acralyzerを使用したAndroidクラッシュレポートの視覚化
複製されると、 https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard
をフォローしてacralyzerダッシュボードに簡単にアクセスできます。 私は認めます:それはそこにある最も美しい分析ツールではありませんが、それはその目的を果たします。
トップメニューから、視覚化するデータベースを選択し(1つのプロジェクトでさまざまなアプリの複数のデータベースをホストできます。これは使用量の割り当てに影響します)、メインダッシュボードでデータをプレビューできます。 たとえば、次のことができます。
- レポートの数を時間の単位(時間、日、月など)でプロットします。
- Android固有の指標(Androidバージョン、SDKバージョン、アプリバージョン、デバイスなど)ごとにレポートの分布を表示します。
- すべてのクラッシュレポートを(詳細なスタックトレースとともに)一覧表示するか、すべてのバグを表示します(ここで、「バグ」とは、異なるユーザーから提供された同一のレポートのグループです)。
- 単一のバグの詳細をプレビューし、そのステータスを解決済みとして設定します(修正されている場合)。
- 古いエントリまたは廃止されたエントリを削除します。

視覚化に使用できるAndroidクラッシュの指標は、アプリから送信することを選択したレポートによって異なることに注意してください。 ACRAはさまざまなレポートフィールドを提供しており、そのうちのいくつかはサイズが非常に大きい場合や、バグ修正に完全には関連していない場合があります。 ほとんどのプロジェクトでは、必須のレポートフィールドで十分です。 これらには以下が含まれます:
- APP_VERSION_CODE
- APP_VERSION_NAME
- ANDROID_VERSION
- パッケージ名
- REPORT_ID
- 建てる
- スタックトレース
AndroidプロジェクトにACRAを実装する
このチュートリアルで前述したように、ACRAの実装は非常に簡単で、いくつかの簡単な手順が必要です。
依存関係を追加する
まず、次のいずれかの方法でライブラリを依存関係として含める必要があります。
- /libsフォルダー内の.jarファイルとして。
Mavenの依存関係として:
<dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
Gradleの依存関係として:
compile 'ch.acra:acra:XYZ'
アプリケーションクラスを追加する
次に、Androidアプリケーションクラスをプロジェクトに追加し(または、インスタンスは1つしかないため、既存のクラスを更新し)、AndroidManifest.xmlで宣言する必要があります。
<application android:name=".MyApp" android:theme="@style/AppTheme"> ...
そこでACRAを設定します。
@ReportsCrashes( formUri = "https://{myusername}.cloudant.com/acra-{myapp}/_design/acra-storage/_update/report", reportType = HttpSender.Type.JSON, httpMethod = HttpSender.Method.POST, formUriBasicAuthLogin = "GENERATED_USERNAME_WITH_WRITE_PERMISSIONS", formUriBasicAuthPassword = "GENERATED_PASSWORD", formKey = "", // This is required for backward compatibility but not used customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PACKAGE_NAME, ReportField.REPORT_ID, ReportField.BUILD, ReportField.STACK_TRACE }, mode = ReportingInteractionMode.TOAST, resToastText = R.string.toast_crash ) public class MainApp extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }
それでおしまい! もちろん、すべての{myapp}プレースホルダーを実際の値、およびformUriBasicAuthLogin
とformUriBasicAuthPassword
の値に置き換える必要があります。
上記のコードスニペットからわかるように、必要なレポートフィールドのみを使用しています。 アプリケーションに関連する可能性のある他のフィールドを自由に追加してください。
POSTの代わりにPUTを使用することもできます。 その場合、 former
の末尾にパラメータとしてREPORT_ID
が付加されます。
最後に、Androidアプリのクラッシュをユーザーに通知する方法を選択することもできます。デフォルトでは、サイレントバックグラウンドレポートです。 この例では、クラッシュが報告されており、バグ修正がまもなく利用可能になることをユーザーに通知するToastメッセージを表示することを選択します。
助けが必要? これがサンプルプロジェクトです
ACRAの動作を確認するために、GitHubでacra_exampleリポジトリを設定しました。 起動時にACRAを初期化し、ボタンを押すことでACRAをクラッシュさせるシンプルなアプリを備えています(これにより、nullポインター例外がトリガーされます)。 クラッシュデータは、ここで視覚化できるサンプルのCloudantデータベースに送信されます。
データを表示するには、次の資格情報を使用してログインします。
- ユーザー名:medo
- パスワード:acraexample
ACRAの代替案
自動化されたAndroidエラーレポートのオプションはACRAだけではありません。 クラッシュは必ず発生するため、解決策を収益化しようとする大企業から開発者(B2D)市場が存在します。
たとえば、Crittercismは、クラッシュレポート用の非常に成熟したプラットフォームです。 見栄えがよく、データ分析のための多数のオプションを提供し、統合が非常に簡単です。 唯一の欠点:価格と無料トライアルは、アクティブユーザーの数、データ保持の日数、サポートの点でかなり制限されています)。 BugSenseも同様のサービスです。
ただし、私の意見では、Crashlyticsが優れたソリューションです。 最近まで、Crashlyticsにはフリーミアムモデル(有料のプレミアム階層付き)がありました。 しかし現在(Twitterによる買収後)、以前はプレミアムだった機能はすべて無料で利用できます。 使用料、料金、制限はありません。 これは、非常に使いやすく、強力な分析および視覚化ツールを提供するため、多くの著名で上位の企業や開発者にとってエラー報告の好ましい手段です。 プラグインとして最も人気のあるIDE(Eclipse、Android Studioなど)と統合することもできるため、Crashlyticsをアプリに追加するのは、プロジェクトを選択してボタンを押すだけです。 これらのプラグインを使用すると、ブラウザを開かなくてもIDEからクラッシュレポートを追跡できます。
では、同じ実装作業でより見栄えが良く、より多くの機能を提供する他の選択肢があるのに、なぜACRAを使用するのでしょうか。 2つの理由を説明します。
これらの他のすべてのオプションは、クローズドソースのプロプライエタリソフトウェアです。 EULAでいっぱいのバスケットを使用しても、データがどのように収集および処理されるかを正確に確認することはできません。 一方、ACRAとacralyzerは、GitHubでホストされているオープンソースプロジェクトであり、ニーズに合わせて簡単にフォークおよび調整できます。
データモビリティ。 Cloudantに満足していないとしましょう。 データを複製して別のバックエンドに移行するのは簡単です。 あなたはデータがあなたのものであり続けることが保証されています。
多くの選択肢と同様に、これは個人的な好みと親しみやすさに要約されます。 アプリの信頼性を高めるために利用できるさまざまな代替案の詳細については、このGoogle+スレッドをご覧ください。
結論は
ACRAは、非常に堅牢でカスタマイズ性の高いライブラリであり、Cloudantやacralyzerと一緒に使用して、アプリの無料の自動クラッシュレポートと基本的な分析を、最小限の実装作業で実現できます。
信頼性の高いAndroidコードを作成するには、多くの経験と先見性が必要ですが、私たちの誰もが真に全知ではありません。 予期しないクラッシュやエラーに備え、できるだけ早く予期しない問題を修正する準備をしてください。 これは、優れた製品と優れたユーザーエクスペリエンスにつながる種類の作業です。