2

我正在尝试将 Firebase Analytics 和崩溃报告添加到我的应用中。我在 Firebase 控制台中添加了该应用程序。我对 gradle 进行了更新,并将 firebase 核心和崩溃报告库添加为依赖项。

我的应用程序分为多个子项目。每个都有一个稍微不同的包名:

app/org.mythtv.android.app
tv/org.mythtv.android.tv
presentation/org.mythtv.android.presentation
domain/org.mythtv.android.domain
data/org.mythtv.android.data

app 和 tv 是两个高层子项目,将 app 和 android tv 版本分开,presentation 是前面 2 个接口层的公共组件,domain 封装了处理数据时与公共逻辑的交互,data 是与后端发生。

它们都共享一个通用包:org.mythtv.android 应用程序 id 是 org.mythtv.android。

我在基于 org.mythtv.android 的 Firebase 控制台中创建了一个应用程序,并将 google-services.json 添加到应用程序和电视的根目录中。然后,我还想跟踪其他层中的崩溃报告。Gradle 此时无法构建,因为它找不到包 org.mythtv.android.presentation 和 org.mythtv.android.data。这些都是 Android 库子项目。数据只是一个java子项目。

Firebase 控制台是否需要每个包都有一个单独的应用程序,并且每个应用程序都需要自己单独的 google-services.json?这样的目的不就失败了吗?

4

2 回答 2

0

Firebase Analytics 根据应用程序包名称生成报告。包名称与您用于 Java 类的包无关。两者是独立的。Android 使用应用程序包名称来标识您的应用程序(例如更新),并且一旦您发布应用程序就无法更改。如果您使用 gradle,您可以在app/build.gradleas applicationId 值或 AndroidManifest.xmlpackage属性中找到它。

于 2016-06-07T22:10:26.337 回答
0

听起来您已经找到了问题的根源,即您只应该复制 google-service.json 将 google 服务插件应用于应用程序项目,而不是库项目。该插件希望进行一些仅与应用程序相关的更改。

为了帮助其他人解决同样的问题,错误消息如下所示:

* What went wrong:
Execution failed for task ':mylibrary:processReleaseGoogleServices'.
> No matching client found for package name 'com.google.mylibrary'

其中“mylibrary”是您自己的库项目的名称。

老实说,我认为插件应该检测它是否被应用到库项目并失败并显示更好的消息,所以我会看看我们是否可以解决这个问题。

顺便说一句,您可能需要考虑将您的两个应用程序项目合并为一个具有两种不同风格的应用程序项目,一种用于应用程序,另一种用于电视。然后,他们可以默认共享所有内容,但有单独的配置以针对不同的 API 级别,甚至有不同的资源、资产、清单项,甚至独立代码集,如果你小心的话。这应该会简化项目的结构。您可以在此处阅读构建变体:

http://tools.android.com/tech-docs/new-build-system/user-guide

于 2016-06-08T01:38:06.173 回答