77

Firebase Crash Reporting を正常に実装しましたが、開発中にコンソールで非現実的なクラッシュを回避するために、アプリの実行中にサービスを無効にして「デバッグ」ビルド バリアントを元に戻す必要があります。

公式ドキュメントはこれについて何も述べていません。

4

16 に答える 16

48

更新: Google Play サービス / Firebase 11 以降では、実行時にクラッシュ レポートを無効にできるようになりました。FirebaseCrash.setCrashCollectionEnabled()(ありがとう@Tyler Carberry )

古い答え:

コミュニティが推測できる限り、これに対する公式のサポートはありません。これを行う最善の方法は、ビルド タイプごとに 1 つずつ、ダッシュボードに複数の Firebase アプリをセットアップし、ビルド バリアントに応じてそれぞれの異なるアプリに向ける複数の google_services.json ファイルをセットアップすることです。

于 2016-05-23T17:19:56.837 に答える
11

私の Application クラスでは、 onCreate()

if (BuildConfig.DEBUG) {
    Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
            Log.wtf("Alert", paramThrowable.getMessage(), paramThrowable);
            System.exit(2); //Prevents the service/app from freezing
        }
    });
}

Firebaseのものを含むoldHandlerを使用するため、機能します

 final UncaughtExceptionHandler oldHandler = Thread.getDefaultUncaughtExceptionHandler();

処理経路外

于 2016-09-05T00:56:59.490 に答える
7

この関連する回答やその他の回答に触発されて、この便利なソリューションを思いつきました。

ロギングにTimberを使用して、デバッグ ビルドとリリース ビルド用に Tree サブクラスのさまざまな実装を作成しました。デバッグでは、logcat に書き込む DebugTree に従います。リリースでは、例外と優先度の高いログを Firebase に転送し、残りをドロップします。

build.gradle

dependencies {
  ...
  compile 'com.jakewharton.timber:timber:4.3.0'
  releaseCompile 'com.google.firebase:firebase-crash:9.0.2'
}

src/debug/java/[パッケージ]/ForestFire.java

import timber.log.Timber;

public class ForestFire extends Timber.DebugTree {}

src/release/java/[パッケージ]/ForestFire.java

import android.util.Log;
import com.google.firebase.crash.FirebaseCrash;
import timber.log.Timber;

public class ForestFire extends Timber.Tree {
  @Override
  protected void log(int priority, String tag, String message, Throwable t) {
    if (Log.WARN <= priority) {
      FirebaseCrash.log(message);
      if (t != null) {
        FirebaseCrash.report(t);
      }
    }
  }
}

アプリの起動

Timber.plant(new ForestFire());
于 2016-09-07T16:02:31.717 に答える
6

最初に gradle ファイルの変数を初期化し、デバッグ モードかリリース モードかを確認します。クラッシュ レポートを送信する最善の方法は、Application クラス内で行うことです。

Build.gradle

    buildTypes {
         release {
             buildConfigField "Boolean", "REPORT_CRASH", '"true"'
             debuggable false
         }
         debug {
             buildConfigField "Boolean", "REPORT_CRASH", '"false"'
             debuggable true
         }
    }

最初にモードを確認し、クラッシュした場合はクラッシュ レポートを送信します。

アプリケーション.java

    /** Report FirebaseCrash Exception if application crashed*/
    Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
    {
        @Override
        public void uncaughtException (Thread thread, Throwable e)
        {
            /** Check whether it is development or release mode*/
            if(BuildConfig.REPORT_CRASH)
            {
                FirebaseCrash.report( e);
            }
        }
    });
于 2016-06-09T10:54:10.797 に答える
0

versionCodeローカル/本番ビルドのフィルターとして使用します。

gradle.properties

VERSION_CODE=1

app/build.gradle

android {
    defaultConfig {
        versionCode VERSION_CODE as int
    }
}

新しいバージョンのアプリを公開するときは、コマンド ラインから新しい値を設定するだけです。

./gradlew build -PVERSION_CODE=new_value

それ以外の場合、Android Studio からビルドするとversionCode、常に同じ が返されるため、Firebase コンソールでクラッシュ レポートを簡単に区別できます。

于 2016-11-23T10:54:01.067 に答える