我已经为Android设置了Crashlytics,在gradle文件中添加了依赖项。我使用Crashlytics.logException(exception);
来记录异常。在应用程序抛出异常故障后,Crashlytics在Firebase控制台中被激活,但没有检测到任何事件且没有出现日志,因此控制台显示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.**
答案 0 :(得分:10)
扩展之前已经说过的内容,将它添加到proguard.cfg就足够了:
-keep class com.google.android.gms.measurement.AppMeasurement { *; }
-keep class com.google.android.gms.measurement.AppMeasurement$OnEventListener { *; }
这是必要的唯一原因是Fabric通过反射引用这两个类,而proguard没有检测到它。
答案 1 :(得分:2)
添加到您的proguard-rules.pro
############ Crashlytics ################################
-keepattributes *Annotation*
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
-keepattributes SourceFile,LineNumberTable
答案 2 :(得分:1)
我今天遇到了同样的问题。 我解决了它添加以下几行:
-keep class com.google.android.gms.measurement.** { *; }
-dontwarn com.google.android.gms.measurement.**
可能它可能与类DefaultAppMeasurementEventListenerRegistrar(方法寄存器(),第37行)有关。
答案 3 :(得分:1)
我遇到了同样的问题,我找到了解决方案......
所以,看看堆栈跟踪,它说问题是找不到方法registerOnMeasurementEventListener
,对吧?但它并没有说明在哪里。
查看该类DefaultAppMeasurementEventListenerRegistrar
的反编译代码。它表明该方法是从类中调用的:
Class onEventListenerClass = this.getClass("com.google.android.gms.measurement.AppMeasurement$OnEventListener");
所以,我刚刚在proguard文件中添加了以下内容:
-keep class com.google.android.** { *; }
它起作用,警告消失了。我想我可以添加特定的类而不是com.google.android
下的所有类,但我的思考过程是:我可能不想触及任何Android类,因为同样的问题可能会出现在其他库或其他代码中。
无论如何,我希望这可以帮助你或它可以帮助其他人遇到同样的问题。干杯!
答案 4 :(得分:0)
当我将Crashlytics集成到我正在使用firebase崩溃报告工具的项目时,我遇到了一个非常类似的问题。
我有这条线
FirebaseCrash.report(new Exception("NonFatal: Network Failure");
当我用
替换它时Crashlytics.log("NonFatal: Network Failure noticed ");
不再抛出此异常。 上面的日志与Timber日志记录集成在一起。
Timber.plant(...);