MyFirebaseInstanceIDService中的Android ANR只是一种产品形式

时间:2018-09-05 11:28:40

标签: android firebase firebase-cloud-messaging android-anr-dialog

在我的应用中,我有两种产品口味。他们两个过去都工作正常。突然,当我尝试运行应用程序时,我开始出现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。而且,如果我更改了developermnet风格的应用程序ID,它就会开始起作用(该应用程序不会冻结)。

我尝试了以下测试:

  1. 我仅添加一个字母“ com.myapp.developmentX”来更改开发版本的包ID。我还要在google-services.json文件中进行相应的更改。然后发展味就开始了。但是,当然Firebase服务不起作用,因为在Firebase控制台中未配置新的应用程序ID。
  2. 在清单文件中,删除MyFirebaseMessagingService和MyFirebaseMessagingService和MyFirebaseInstanceIDService。然后应用程序在启动时仍然冻结,但是logcat中的错误略有变化: com.myapp.development中的ANR PID:683 原因:执行服务com.myapp.development / com.google.firebase.iid.FirebaseInstanceIdService

  3. 我签出了一个旧的git分支,并尝试启动它,但问题仍然存在。

  4. 我也尝试过:卸载应用程序,然后重新安装。清洁项目。删除构建目录。重新启动测试设备。使用Android模拟器。重新启动计算机。重新启动Android Studio。将Android Studio更新到最新的Mac版3.1.4。但是这些都没有帮助。

问题似乎与应用程序ID和Firebase有关,但我找不到。 有人有什么想法吗?

在Shark和sebasira发表评论后更新。

在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

但这没有帮助。

1 个答案:

答案 0 :(得分:1)

我面临着完全相同的问题,我的应用程序配置也与您的完全相同。

该问题是由我在代码中使用的最新Facebook SDK引起的,它在应用启动之前使Firebase崩溃,因此应用转到了ANR。

我将我的Facebook SDK版本设置为4.35.0,就解决了该问题。

尝试一下,让我知道是否有帮助。