权限名称C2D_MESSAGE不唯一,出现在C2D_MESSAGE中。

5
我遇到了这个错误:


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" />

在build.gradle中为一个flavor添加applicationIdSuffix后,问题开始出现(乍一看似乎与此无关)。

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文件。 这可能吗?
在清单中删除权限并不能解决API<23的问题。简单地移除它。

你有检查过这个SO帖子中的建议答案吗? - MαπμQμαπkγVπ.0
是的,我已经检查过了,它不适用于API<23。 - Jim Clermonts
3个回答

2

在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" />


2

文档有误,我已在API 18上测试过,但失败了。 - Jim Clermonts
你在API 18上到底看到了哪些故障? - Larry Schiefer

1
这个问题通常发生在您尝试在同一设备上安装应用程序的调试版本和发布版本时。
为了解决这个bug,您可以尝试卸载并重新安装该应用程序。
关于AndroidManifest.xml文件中的源代码:
<permission
    android:name="my.packagename.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.permission.C2D_MESSAGE" />

我认为你的权限是正常的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接