Cordova打包Google Play时tools:node属性前缀tools未绑定报错如何解决
Cordova打包Google Play时报tools前缀未绑定的解决方案
- 首要错误:你的XML根节点闭合标签书写错误,开头
<widget>对应的闭合标签误写为</widgets>,多了字母s,会直接导致整份配置文件解析异常,根节点声明的xmlns:tools命名空间无法被识别,先将闭合标签修正为</widget>。 - 核心机制问题:Cordova处理
config-file标签下的内容合并到AndroidManifest.xml时,不会自动继承widget根节点的命名空间,你需要在config-file内部补充tools命名空间声明,修正后的配置示例如下:
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" id="com.mypackage" versionCode="10804" version="1.8.4"> <config-file target="AndroidManifest.xml" parent="/manifest"> <manifest xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove"/> </manifest> </config-file> </widget>
- 额外注意:你配置的
versionCode属性值1.8.4不符合Android规范,Android要求versionCode必须为正整数,建议改为和版本号对应的数值,比如1.8.4版本对应10804。 - 老版本兼容方案:如果你使用的是Cordova Android 9及以下版本,对tools属性的支持存在缺陷,可以升级到Cordova Android 10.0+,也可以改用
edit-config标签实现相同需求,示例如下:
<edit-config file="AndroidManifest.xml" mode="overwrite" target="/manifest/uses-permission[@android:name='android.permission.ACCESS_BACKGROUND_LOCATION']"> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove" xmlns:tools="http://schemas.android.com/tools" /> </edit-config>
内容的提问来源于stack exchange,提问作者shayan izadi
相关产品推荐
相关产品推荐

