Firebase経由でFabricのCrashlyticsを利用するアプリがあります。以下は、アプリケーションonCreateで最初に実行されるものです。
CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
.disabled(BuildConfig.DEBUG)
.build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());
それにもかかわらず、クラッシュはDEBUG == true
モード。
次のバージョンを使用します
私のbuild.gradle classpath "io.fabric.tools:gradle:1.25.1"
私のapp/build.gradle implementation "com.crashlytics.sdk.Android:crashlytics:2.9.1"
残念ながら、クラッシュはまだ報告されています。アイデア、私が間違っていることは何ですか?
Firebase Crashlyticsのドキュメント は、アプリセッションでレポートを有効にすると、無効にできないことを説明しています。
デフォルトでは、ContentProvider
インスタンスが作成される前に実行されるCrashlyticsInitProviderという名前のApplication
でCrashlyticsレポートが有効になっています。 CrashlyticsInitProviderは、デフォルトでtrueであるメタデータ値_firebase_crashlytics_collection_enabled
_に基づいてレポートを有効または無効にします。
レポートを無効にする場合は、マニフェストメタデータが存在し、falseに設定されていることが重要です。
_<meta-data
Android:name="firebase_crashlytics_collection_enabled"
Android:value="false" />
_
アプリの初期化中にlogcatでメッセージを確認します。
_CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful
_
メッセージが存在する場合、_firebase_crashlytics_collection_enabled
_はtrueです。メッセージが存在しない場合、メタデータを正常に設定してクラッシュレポートを無効にしました。
メタデータが見つからないかtrueに設定されている場合、Fabric.with(...)
の呼び出しを使用してコード内のレポートを無効にすることはできません。
別の回答へのコメントで、メタデータを使用してレポートを無効にしようとしたが成功しなかったことを示しています。タイプミスをチェックし、宣言が_<application>
_要素に正しく配置されていることを確認してください。私のテストでは、メタデータを使用してレポートを無効にし、実行時に有効にすることができます。
正解は Bob Snyder および niqueco によってすでに投稿されていますが、実際のリリースAPKをビルドするたびにメタデータ値を変更するのは面倒なようです。ここに解決策があります。いわゆる manifestPlaceholder を使用し、true
に応じてfalse
or buildType
に値を自動的に変更します。
アプリに次を追加しますbuild.gradle
Android {
// ...
buildTypes {
debug {
manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
manifestPlaceholders = [enableCrashReporting:"true"]
}
}
}
そしてこれをあなたのAndroidManifest.xml
<manifest ... >
<application ...>
// ...
<meta-data Android:name="firebase_crashlytics_collection_enabled" Android:value="${enableCrashReporting}" />
</application>
</manifest>
現在の値を確認するには、Merged Manifest
tab AndroidManifest.xmlを開いたら。次のように表示されます。
私はついに問題を発見しました。 Crashlyticsはコンテンツプロバイダーから初期化されるため、アプリケーションのonCreate()
から無効にしようとする頃には遅すぎます。逆コンパイルされたコードを見てみると、マニフェストの<application>要素にメタデータを追加することで、その初期化を無効にできることがわかりました。
だから、私はこれをしています... app/src/debug/AndroidManifest.xmlにこれを追加しました
_<?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="<your app package>">
<application>
<meta-data Android:name="firebase_crashlytics_collection_enabled" Android:value="false" />
</application>
</manifest>
_
また、アプリモジュールのgradleビルドファイルでCrashlyticsを無効にして、次を追加しました。
_ debug {
ext.enableCrashlytics = false
}
_
驚いたことに、私はFabric.with(...)
をする必要はありませんでした。上記で十分でした。
正常に機能しています。レポートはありません。
アプリのbuild.gradleのCrashlytics
を無効にする必要があります。 デバッグビルドのCrashlyticsを無効にする
Android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
Android documentation Firebaseクラッシュレポートのカスタマイズ
オプトインレポートの有効化:デフォルトでは、Firebase Crashlyticsはアプリのすべてのユーザーのクラッシュレポートを自動的に収集します。ユーザーが送信するデータをより詳細に制御できるようにするには、代わりにオプトインレポートを有効にします。
これを行うには、自動収集を無効にし、オプトインユーザーに対してのみCrashlyticsを初期化する必要があります。
AndroidManifest.xmlファイルでメタデータタグを使用して自動収集をオフにします。
<meta-data
Android:name="firebase_crashlytics_collection_enabled"
Android:value="false" />
アプリのアクティビティの1つからCrashlyticsを初期化して、選択したユーザーのコレクションを有効にします。
Fabric.with(this, new Crashlytics());
Firebase Crashレポートを完全に無効にし、また追加する必要がない場合
com.crashlytics.sdk.Android:crashlytics:2.9.1
依存関係は、 @ reVerse の回答に従いますが、これをAndroidManifest.xmlにも追加します。
<application ...>
// ...
<meta-data
Android:name="firebase_crashlytics_collection_enabled"
Android:value="${enableCrashReporting}" />
<meta-data
Android:name="firebase_analytics_collection_deactivated"
Android:value="true"/>
</application>