权限名称 C2D_MESSAGE 不是唯一的同时出现在 C2D_MESSAGE
Posted
技术标签:
【中文标题】权限名称 C2D_MESSAGE 不是唯一的同时出现在 C2D_MESSAGE【英文标题】:Permission name C2D_MESSAGE is not unique appears in both C2D_MESSAGE 【发布时间】:2018-09-22 12:48:34 【问题描述】:我收到此错误:
Permission name C2D_MESSAGE is not unique (appears in both my.packagename.permission.C2D_MESSAGE and my.packagename.acc.permission.C2D_MESSAGE) (Previous permission here)
在我的 android 清单中:
<permission
android:name="my.packagename.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.permission.C2D_MESSAGE" />
问题是在将 applicationIdSuffix 添加到 build.gradle 中的一个风味之后开始的(乍一看似乎与它无关)。
Build.gradle:
flavorDimensions "type"
productFlavors
acceptance
dimension="type"
applicationIdSuffix ".acc"
versionNameSuffix "-acc"
production
dimension="type"
applicationIdSuffix ""
versionNameSuffix ""
Application.java:
if (BuildConfig.DEBUG)
GoogleAnalytics.getInstance(context).setDryRun(true);
else
setupGoogleAnalytics();
我创建了 google-services.json 的副本。
我已将 google-services.json 添加到:
app\src\acceptance\google-services.json (fake numbers)
app\src\production\google-services.json
我为接受中的键设置了不同的虚假值。我不希望接受版本中的 Google Analytics。所以我宁愿不创建单独的 google-services.json。这可能吗?
Simply removing manifest 中的权限 不适用于 API
【问题讨论】:
你检查过this SO post中的建议答案了吗? 是的,我已经检查过了,它不适用于 API 【参考方案1】:您使用的是最新的 Firebase 云消息传递 (FCM) SDK,但保留了旧的 GCM 权限。 FCM SDK 在构建时自动将必要的权限注入到您的清单中。
根据此处的迁移指南从清单中删除 C2D_MESSAGE 权限:https://developers.google.com/cloud-messaging/android/android-migrate-fcm
【讨论】:
文档不正确。我在 API 18 上对此进行了测试,但失败了。 您在 API 18 上看到了哪些错误?【参考方案2】:将新的 androidmanifest 添加到:
app\src\acceptance\androidmanifest.xml
并添加“acc”前缀:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!--this needs to be in there for API 23 and lower-->
<permission
android:name="my.packagename.acc.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.acc.permission.C2D_MESSAGE" />
【讨论】:
【参考方案3】:当您尝试在同一设备上安装应用的调试版和发布版时,通常会出现此问题。
为了修复此错误,您尝试卸载并重新安装该应用程序。
关于文件AndroidManifest.xml中的源代码:
<permission
android:name="my.packagename.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.permission.C2D_MESSAGE" />
我认为您的许可没问题。
【讨论】:
以上是关于权限名称 C2D_MESSAGE 不是唯一的同时出现在 C2D_MESSAGE的主要内容,如果未能解决你的问题,请参考以下文章