将权限名称指定为resValue时出现"缺少名称属性"错误.

fob*_*ter 1 android manifest gradle

我有几个不同的Gradle buildTypes,我正在尝试为每个buildTypes分别指定Google C2D_MESSAGE权限名称,因为我不能在手机上安装不同的应用程序,因为它们共享一个权限名称.但我遇到了"遗失名称属性"错误.

所以我在build.gradle中做了类似的事情:

    buildType2 {
        applicationIdSuffix '.suffix1'
        ...
        resValue 'string', 'gcmPermission', "com.mypackage.suffix1.permission.C2D_MESSAGE"
    }
Run Code Online (Sandbox Code Playgroud)

在我的AndroidManifest.xml中:

<permission
    android:name="@string/gcmPermission"
    android:protectionLevel="signature" />

<uses-permission android:name="@string/gcmPermission" />
Run Code Online (Sandbox Code Playgroud)

但是,我在构建时遇到以下错误:

AndroidManifest.xml:19: missing name attribute in element <permission>.
Run Code Online (Sandbox Code Playgroud)

arn*_*ans 5

我通过将permission-和uses-permission元素中的package-name替换为占位符来解决问题,占位符由gradle自动替换为buildtypes和/或productFlavors:

    <permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
Run Code Online (Sandbox Code Playgroud)