android - 将权限名称指定为 resValue 时出现 "Missing name attribute"错误。

标签 android gradle manifest

我有几个不同的 Gradle 构建类型,我正在尝试为每个构建类型单独指定 Google C2D_MESSAGE 权限名称,因为我无法在手机上安装不同的应用程序,因为它们共享一个权限名称。但是我遇到了“缺少名称属性”错误。

所以我在我的 build.gradle 中做这样的事情:

    buildType2 {
        applicationIdSuffix '.suffix1'
        ...
        resValue 'string', 'gcmPermission', "com.mypackage.suffix1.permission.C2D_MESSAGE"
    }

在我的 AndroidManifest.xml 中:

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

<uses-permission android:name="@string/gcmPermission" />

然而,我在构建时遇到了以下错误:

AndroidManifest.xml:19: missing name attribute in element <permission>.

最佳答案

我通过用一个占位符替换 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"/>

关于android - 将权限名称指定为 resValue 时出现 "Missing name attribute"错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306904/

相关文章:

android - 在 Android 上提供直接下载链接

android - 在 Activity 中获取 Fragment 实例

java - 使用 Maven 的谷歌应用引擎代码

安卓 logcat 消息 (E/SMD : DCD on)

gradle - 链接两个任务

gradle - 使用 Gradle 将资源和配置文件添加到 JAR

powershell - 我在 powershell 模块 list 中列出要导出的变量实际上并未导出

windows - 如何创建 list 文件以将我的可执行文件/插件指向我的特定版本的 Qt.dll?

android-studio - Android Studio更新(1.5至2.2.3)中断了项目

reactjs - list 第 1 行、第 1 列,推送到生产时出现语法错误