我正在尝试将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是两个高级子项目,它们将应用程序与android tv版本分开,表示是前两个接口层的常用组件,域在处理数据时封装了与通用逻辑的交互,而数据是发生与后端的互动。
他们都共享一个共同的包:org.mythtv.android 应用程序ID是org.mythtv.android。
我在Firebase控制台中创建了一个基于org.mythtv.android的应用,并将google-services.json添加到了应用和电视的根目录。然后我想跟踪其他层中的崩溃报告。 Gradle在这一点上无法构建,因为它无法找到包org.mythtv.android.presentation和org.mythtv.android.data。这些都是Android Library子项目。 data只是一个java子项目。
Firebase控制台是否需要为每个程序包设置单独的应用程序,每个应用程序都需要自己独立的google-services.json?这种失败不是为了这个目的吗?
答案 0 :(得分:0)
Firebase Analytics报告基于应用程序包名称。包名称与您用于Java类的包无关。这两个是独立的。 Android使用应用程序包名称来识别您的应用程序(例如更新),并且在您发布应用程序后无法更改。如果您使用的是gradle,则可以在app/build.gradle
中将其作为applicationId值或在AndroidManifest.xml package
属性中找到。
答案 1 :(得分: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