Android &引用;缺少名称属性";将权限名称指定为resValue时出错。
我有几个不同的Gradle BuildType,我正试图为每一个这些BuildType分别指定Google C2D_消息权限名称,因为我无法在手机上安装不同的应用程序,因为它们共享一个权限名称。但我遇到了“缺少名称属性”错误 所以我在我的身体里做了类似的事情。格雷德尔:Android &引用;缺少名称属性";将权限名称指定为resValue时出错。,android,gradle,manifest,Android,Gradle,Manifest,我有几个不同的Gradle BuildType,我正试图为每一个这些BuildType分别指定Google C2D_消息权限名称,因为我无法在手机上安装不同的应用程序,因为它们共享一个权限名称。但我遇到了“缺少名称属性”错误 所以我在我的身体里做了类似的事情。格雷德尔: buildType2 { applicationIdSuffix '.suffix1' ... resValue 'string', 'gcmPermission', "c
buildType2 {
applicationIdSuffix '.suffix1'
...
resValue 'string', 'gcmPermission', "com.mypackage.suffix1.permission.C2D_MESSAGE"
}
在my 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>.
AndroidManifest.xml:19:元素中缺少name属性。
我通过替换权限中的包名解决了这个问题,并使用带有占位符的权限元素,该占位符会自动被gradle替换为BuildType和/或productFlavors:
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
我通过替换权限中的包名解决了这个问题,并使用带有占位符的权限元素,该占位符会自动被gradle替换为BuildType和/或productFlavors:
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
根据,问题只是“name”属性不能引用字符串资源,它必须是原始字符串
可以使用资源指定标签,但不能指定名称
名称必须是唯一的,因此它应该使用Java风格的作用域-例如,“com.example.project.allowed\u ACTION”
这就是为什么arne.jans提供的解决方案有效。Gradle变量在编译前被替换,在清单中显示为原始字符串。根据,问题只是“name”属性不能引用字符串资源,它必须是原始字符串
可以使用资源指定标签,但不能指定名称
名称必须是唯一的,因此它应该使用Java风格的作用域-例如,“com.example.project.allowed\u ACTION”
这就是为什么arne.jans提供的解决方案有效。Gradle变量在编译前被替换,作为原始字符串显示在清单中。您还可以在
构建中定义自己的清单占位符。Gradle
:
buildType2 {
manifestPlaceholders = [permissionName: 'com.example.my_perm']
#You can define it also as a string resource here
resValue 'string', 'permissionName', 'com.example.my_perm'
}
然后,您可以在Android清单中使用
${permissionName}
,或者在代码中使用R.string.permissionName
。您还可以在build.gradle
中定义自己的清单占位符:
buildType2 {
manifestPlaceholders = [permissionName: 'com.example.my_perm']
#You can define it also as a string resource here
resValue 'string', 'permissionName', 'com.example.my_perm'
}
然后你可以在Android清单中使用
${permissionName}
,或者在代码中使用R.string.permissionName
。你解决了你的问题吗?你解决了你的问题吗?很有魅力!!很有魅力!!