【发布时间】:2018-09-05 11:28:39
【问题描述】:
在我的应用中,我有两种产品风格。他们俩以前都工作得很好。当我尝试运行应用程序并且应用程序在启动过程中冻结时,突然开始出现 ANR 错误。 Logcat中的错误是:
com.myapp.development 中的 ANR PID:7937 原因:执行服务com.myapp.development/com.myapp.development.service.MyFirebaseInstanceIDService
永远不会调用 MyFirebaseInstanceIDService.onTokenRefresh 方法。应用程序在我自己的任何代码执行之前冻结。
生产的味道仍然很好。
Firebase 控制台中的所有内容均已正确设置。该应用在 Play 商店中,两种风格都可以正常工作。
productFlavors {
production {
applicationId 'com.myapp'
dimension "default"
}
development {
applicationId 'com.myapp.development'
dimension "default"
}
}
正如您所见,这两种风格之间的唯一区别是应用程序 ID。如果我在developmnet 风格中更改应用程序ID,它就会开始工作(应用程序不会冻结)。
我尝试了以下测试:
- 我通过添加一个字母来更改开发风格的包 ID:“com.myapp.developmentX”。我也在 google-services.json 文件中进行了相应的更改。然后开发味道也开始了。但是 Firebase 服务当然不起作用,因为新的应用程序 ID 没有在 Firebase 控制台中配置。
在清单文件中,我删除了 MyFirebaseMessagingService 和 MyFirebaseMessagingService 以及 MyFirebaseInstanceIDService。然后应用程序在启动时仍然冻结,但 logcat 中的错误略有变化: com.myapp.development 中的 ANR PID:683 原因:执行服务 com.myapp.development/com.google.firebase.iid.FirebaseInstanceIdService
我检查了一个旧的 git 分支并尝试启动它,但问题仍然存在。
- 我也试过:卸载应用程序并重新安装。清洁项目。删除构建目录。重启测试设备。使用安卓模拟器。重新启动计算机。重启安卓工作室。将 Android Studio 更新到最新的 Mac 版 3.1.4。但这些都没有帮助。
看起来问题与应用程序 ID 和 Firebase 有关,但我找不到。 有人有什么想法吗?
在 Shark 和 sebasira 的 cmets 之后更新。
在 Firebase 控制台中,我有一个项目,并且为它定义了两个应用程序 - 每种风格一个。在这种情况下,不需要多个 google-services.json,每种风格一个。该文件对于所有口味都是相同的,可以放在根目录中: 应用程序/ google-services.json
文件结构是这样的:
{
"project_info": {...},
"client": [...],
}
如您所见,有一系列客户端。所有应用程序 ID(所有风格)都在该数组中定义。这就是为什么如果我从 Firebase 下载每个应用程序的 google-services.json 文件,它们都是一样的。
不管怎样,我尝试为每种风味都放置一个不同的 google-services.json 文件:
app/src/
flavor1/google-services.json
flavor2/google-services.json
但这没有帮助。
【问题讨论】:
-
我猜你需要另一个
google-services.json,每个应用ID一个。 -
每种口味都需要不同的
google-services.json文件。就这么简单
标签: android firebase firebase-cloud-messaging android-anr-dialog