C2D_MESSAGE中的权限名称C2D_MESSAGE不唯一

时间:2018-04-12 11:25:03

标签: android google-play-services

我收到此错误:

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)

enter image description here

在我的Android清单中:

<permission
    android:name="my.packagename.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.permission.C2D_MESSAGE" />

在将buildIdSuffix 添加到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清单中的权限 不适用于API&lt; 23.

3 个答案:

答案 0 :(得分:1)

这看起来就像您使用的是最新的Firebase云消息传递(FCM)SDK,但保留了旧的GCM权限。 FCM SDK会在构建时自动将必要的权限注入清单。

根据迁移指南从您的清单中删除C2D_MESSAGE权限:https://developers.google.com/cloud-messaging/android/android-migrate-fcm

答案 1 :(得分:1)

将新的androidmanifest添加到:

应用\ SRC \验收\的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" />

答案 2 :(得分:1)

当您尝试在同一设备上安装应用的调试版和发行版时,通常会发生此问题。

为了解决此错误,您尝试卸载并重新安装该应用。

关于文件AndroidManifest.xml中的源代码:

<permission
    android:name="my.packagename.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.permission.C2D_MESSAGE" />

我认为你的许可是可以的。