我已经遵循并三次验证了添加firebase&在此处解析我的应用程序:https://firebase.google.com/docs/android/setup?hl=en在这里:https://firebase.google.com/docs/crashlytics/get-started?authuser=0&platform=android,验证了google-services.json是正确的(实际上是为了进行比较而重新下载的,它适用于Firebase消息传递(。已启用分析共享。在Firebase控制台上为我的应用程序启用了Crashlytics。一些json报告确实在运行时被记录为上传(而不是崩溃(,结果为204,但在启动时,应用程序会收到一个错误";E/FirebaseCrashlytics:设置请求失败。java.io.FileNotFoundException:https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/(snip(&build_ version=99&display_ version=2022.08.31.99等等等等";然后当我点击我的";"测试碰撞";按钮,我得到另一个错误";E/FirebaseCrashlytics:无法发送报告。获取设置时超时&";。
问题是,崩溃报告确实出现在上传到Google Play(封闭测试(的Google Play预发布测试期间发生的崩溃中;碰撞试验";按钮,然后我得到了无崩溃的用户、日志、堆栈跟踪等等。因为这个部分正在工作,所以看起来我的设置是正确的。
我在设备上安装了Proton VPN,但在测试过程中禁用了它。这似乎无关紧要。
注意:无论该应用程序随后是从Google Play下载的(测试版(,还是我编译、调试或发布的,我都无法上传崩溃,为了在Android Studio上运行它,并对同一设备进行USB调试(但我必须卸载一个才能安装另一个,只有下载的一个可以选择"报告"崩溃——如果我不选择报告,我不知道是否会上传崩溃,但我从未在Play Console、Firebase或其他任何地方看到过报告的崩溃。(
有人知道我如何在预发布测试之外向Crashlytics报告崩溃吗?是否存在诸如";应用程序必须以相同的版本"上传";或";不允许VPN";或"必须在崩溃后在设备上的弹出对话框中选择"报告";或";显示版本字符串不能包含空格";还是其他什么?(从我甚至在文档上读到的一些东西来看,我似乎应该能够测试本地构建并获得崩溃报告。(
我正在使用最新的";花栗鼠";演播室我刚刚更新到最新的firebase BOM。
从我的项目级别构建.gradle:
buildscript {
repositories {
google()
mavenCentral()
maven {url "https://plugins.gradle.org/m2/" }
maven { url "https://jitpack.io" }
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.2'
//classpath 'com.google.android.gms:oss-licenses-plugin:0.9.5'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
//classpath 'com.github.jk1:gradle-license-report:1.9'
classpath 'com.github.jk1:gradle-license-report:2.0'
classpath 'com.google.gms:google-services:4.3.13'
// Add the Crashlytics Gradle plugin
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1'
}
} ...
从我的模块级构建.gradle:
plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
id 'com.google.firebase.crashlytics'
}
...
repositories {
maven { url "https://jitpack.io" }
mavenCentral()
}
dependencies {
// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:30.4.0') // Bill Of Materials
implementation 'androidx.appcompat:appcompat:1.4.2' // this is last version compatible with Android sdk 31
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'androidx.navigation:navigation-ui:2.5.1'
implementation "androidx.lifecycle:lifecycle-process:2.5.1"
implementation 'androidx.lifecycle:lifecycle-common-java8:2.5.1'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'org.jetbrains:annotations:15.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.preference:preference:1.2.0'
implementation 'androidx.biometric:biometric:1.1.0'
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
implementation 'org.apache.commons:commons-math3:3.6.1'
implementation 'com.github.drawers:SpinnerDatePicker:2.1.0'
testImplementation 'junit:junit:4.13-beta-2'
androidTestImplementation 'androidx.test:runner:1.4.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'ch.qos.logback:logback-classic:1.2.10'
implementation 'ch.qos.logback:logback-core:1.2.10'
implementation 'org.codehaus.janino:commons-compiler:3.1.6'
// for in-app purchases (data service subscription)
implementation 'com.android.billingclient:billing:5.0.0'
// for message broadcasting, diagnostics & analytics
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-messaging'
}
在我的主要活动中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// Obtain the FirebaseAnalytics instance.
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
...
// TODO remove in production
addTestCrashButtonForCrashlytics();
...
}
private void addTestCrashButtonForCrashlytics() {
Button crashButton = new Button(this);
crashButton.setText("Test Crash");
crashButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
throw new RuntimeException("Test Crash"); // Force a crash
}
});
我提前感谢任何能帮我解决这个问题的人。
一个…的儿子。。。!在这个问题上呆了几天后,我刚刚找到了答案-事实上,问题是显示版本中有空格。因此,在模块级build.gradle中,我有一个描述性的版本名称,它在Google Play中解释了最新的更改摘要:
versionName "2022.08.31.99 Blah, blah blah"
在错误中看起来可疑的";E/FirebaseCrashlytics:设置请求失败。java.io.FileNotFoundException:https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/(snip(&build_ version=99&display_ version=2022.08.31.99等等等等";,因为URL不能有空格,所以我试着把它改为:
versionName "2022.08.31.99"
我重新编译了它,并在手机上通过USB运行它,点击测试崩溃按钮,几乎立即得到了崩溃报告。把它倒出来,问题出现了,把它放回去,它起作用了!希望这能帮助其他人!
顺便说一下,这是使用在USB上运行的本地调试构建来实现的。此外,它不必与Google Play中上传的版本相匹配——我随后增加了它的值,但它仍然报告了崩溃。它似乎确实在VPN上有问题(可能是特定的服务器,也可能只是不允许在VPN上使用。(这些都是自动上传到Crashlytics的崩溃-我不必选择";报告";在弹出窗口中,实际上不能,因为它们是本地构建,正如我之前提到的,不提供该选项。