私はアンドロイドアプリを開発しています。アプリが頻繁にクラッシュします。根本的な原因を見つけるためにアプリがクラッシュしている間、logcat メッセージを SD カードに保存したいと考えています。これを行う方法はありますか?
2 に答える
完全に自動化されたクラッシュ ログ収集に向けて一歩を踏み出すのに役立ついくつかのアイデア。ここではまだ完全なシステムをロールバックしていません。デバイスがクラッシュした後にデバイスを取得したり、QA グループから詳細情報を求めたりするだけで十分な運がありましたが、次のようになります。
- ACRAは比較的簡単に実装できます。実装しなくても、ソースは github にあります。
- 関連する質問Android crash reporting library (pre Froyo)には、 android-remote-stacktrace、前述の ACRA、Android-Error-Reporter、およびその他の商用ソリューションを含む、多数のリンクとソリューションがあります。
- 一部のデバイスはクラッシュ出力を自動的にキャプチャします
adb pull /data/log/dumpstate_app_native.txt.gz
。パスは logcat に表示されるはずです。ただし、これらはクラッシュごとに上書きされる傾向があります。(これがメーカー固有の機能なのか、それともAndroidのコアの一部のバージョンに登場したものなのか、誰かが答えられるなら、私は知りたいです!) - デバイスにインストールできるlogcat アプリ ( aLogCatなど) を取得できます。
- TestFlightは Android 側でベータ版になります。彼らは iOS 側にクラッシュ レポートを持っており、Android 側にもあるはずです。また、サービスを使用することには他にもさまざまな素晴らしい利点があります。統合は私たちの経験では非常に簡単です。
アプリ内で独自のものを作成する場合は、(ローカル ビルドの場合でも) READ_LOGSおよびWRITE_EXTERNAL_STORAGEマニフェスト アクセス許可が必要です。その後、ログ API または通常の File.copy を使用するか、logcat
それ自体に対するシステム コールを使用することもできます。この質問の横にある「関連」リンクには、多数のオプションと例があります。
うまくいけば、これは役に立ちました。
独自の logcat メッセージを読むことは、他の質問でカバーされています。
デバイス上の logcat ファイルにアクセスする方法 アプリケーション内で logcat をプログラムで読み取る
アプリがクラッシュしたときにこれを行うには、defaultUncaughtExceptionHandler をインストールする必要があります。
作成時のアクティビティまたは作成時のアプリケーションのいずれか。次のコードを追加します。
final Thread.UncaughtExceptionHandler oldUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
// DO your error handling here.
// Write your log cat, or write your exception stack trace here.
// Get rid of this line if you don't want a popup letting you know that your app has crashed.
oldUncaughtExceptionHandler.uncaughtException(thread,throwable);
}
});