Android gradleファイルに依存関係を追加するためのCrashlyticsを設定しました。例外をログに記録するためにCrashlytics.logException(exception);
を使用します。アプリがスローした後、FirebaseコンソールでCrashlyticsがアクティブ化されました意図的に例外が発生しましたが、イベントが検出されず、ログが表示されなかったため、コンソールには0回のクラッシュが表示されます。同時にLogCatには次のように表示されます。
I/CrashlyticsCore: Initializing Crashlytics 2.6.1.23
I/CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful
W/CrashlyticsCore: Expected method missing: registerOnMeasurementEventListener
Java.lang.NoSuchMethodException: parameter type is null
at Java.lang.Class.getMethod(Class.Java:656)
at Java.lang.Class.getDeclaredMethod(Class.Java:626)
at com.crashlytics.Android.core.DefaultAppMeasurementEventListenerRegistrar.invoke(DefaultAppMeasurementEventListenerRegistrar.Java:89)
at com.crashlytics.Android.core.DefaultAppMeasurementEventListenerRegistrar.register(DefaultAppMeasurementEventListenerRegistrar.Java:54)
at com.crashlytics.Android.core.CrashlyticsController.registerAnalyticsEventListener(CrashlyticsController.Java:1574)
at com.crashlytics.Android.core.CrashlyticsCore.doInBackground(CrashlyticsCore.Java:320)
at com.crashlytics.Android.core.CrashlyticsCore.doInBackground(CrashlyticsCore.Java:44)
at io.fabric.sdk.Android.InitializationTask.doInBackground(InitializationTask.Java:63)
at io.fabric.sdk.Android.InitializationTask.doInBackground(InitializationTask.Java:28)
at io.fabric.sdk.Android.services.concurrency.AsyncTask$2.call(AsyncTask.Java:311)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:237)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:422)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:237)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1112)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:587)
at Java.lang.Thread.run(Thread.Java:818)
I/CrashlyticsCore: Crashlytics report upload complete: 5ABA789603A5-0001-7C52-7AF6D12C00C8
registerOnMeasurementEventListener
メソッドが欠落しているのはなぜですか。次のデフォルトのproguard-rules.proファイルしかありません。
更新:
-assumenosideeffects class Android.util.Log {
public static int d(...);
}
############ Crashlytics ################################
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends Java.lang.Exception
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
いくつかがすでに言ったことを拡張して、これをproguard.cfgに追加するだけで十分です。
-keep class com.google.Android.gms.measurement.AppMeasurement { *; }
-keep class com.google.Android.gms.measurement.AppMeasurement$OnEventListener { *; }
これが必要な唯一の理由は、Fabricがリフレクションによってこれらの2つのクラスを参照し、proguardがそれを検出しないためです。
Proguard-rules.proに追加します
############ Crashlytics ################################
-keepattributes *Annotation*
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
-keepattributes SourceFile,LineNumberTable
私は同じ問題を抱えていて、解決策を見つけました...それで、スタックトレースを見ると、問題はメソッドregisterOnMeasurementEventListener
が見つからないということですよね?しかし、それはどこにあるかを言いません。
そのクラスDefaultAppMeasurementEventListenerRegistrar
の逆コンパイルされたコードを見てください。これは、メソッドがクラスから呼び出されていることを示しています。
Class onEventListenerClass = this.getClass("com.google.Android.gms.measurement.AppMeasurement$OnEventListener");
そこで、proguardファイルに以下を追加しました。
-keep class com.google.Android.** { *; }
そしてそれはうまくいきました、警告は消えました。 com.google.Android
の下にすべてではなく特定のクラスを追加できたと思いますが、私の思考プロセスは次のとおりでした。他のライブラリやその他のライブラリでも同じ問題が発生する可能性があるため、Androidクラスには触れたくないかもしれません。コード。
とにかく、これがあなたの助けになるか、同じ問題を抱えている他の人々の助けになることを願っています。乾杯!
私は今日同じ問題に直面しました。以下の行を追加して解決しました:
-keep class com.google.Android.gms.measurement.** { *; }
-dontwarn com.google.Android.gms.measurement.**
おそらくそれはクラスDefaultAppMeasurementEventListenerRegistrarに関連している可能性があります(メソッドregister()、37行目)
Firebaseクラッシュレポートツールを使用していたプロジェクトにCrashlyticsを統合したときに、非常によく似た問題が発生しました。
私はこの行を持っていました
FirebaseCrash.report(new Exception("NonFatal: Network Failure");
交換したとき
Crashlytics.log("NonFatal: Network Failure noticed ");
この例外はスローされなくなりました。上記のログは、Timberロギングと統合されました。
Timber.plant(...);