Phonegap config.xml仅处理最后一个uses-feature块问题求助
解决Cordova edit-config覆盖uses-feature的问题
你遇到的问题根源在于两个edit-config使用了相同的target路径,导致后一个配置直接覆盖了前一个。Cordova的edit-config在处理/manifest/uses-feature这个target时,会将其视为匹配所有<uses-feature>节点,当你用mode="add"时,它不会追加新节点,而是替换掉已匹配的节点,所以最后只会保留最后一个配置。
正确的配置方式有两种:
方式1:在同一个edit-config中添加多个<uses-feature>
把两个功能配置放在同一个edit-config块里,target指向/manifest(也就是AndroidManifest的根节点),这样就能一次性添加两个<uses-feature>节点:
<!-- Android config overrides --> <edit-config target="/manifest" file="AndroidManifest.xml" mode="add" platform="android"> <uses-feature android:name="android.hardware.location" android:required="false"/> <uses-feature android:name="android.hardware.sensor.compass" android:required="true"/> </edit-config>
方式2:为每个<uses-feature>使用精准的target选择器
如果你需要分开配置(比如后续要单独修改其中一个),可以用XPath选择器精准定位每个<uses-feature>节点,确保每个edit-config只作用于自己的目标节点:
<!-- Android config overrides --> <edit-config target="/manifest/uses-feature[@android:name='android.hardware.location']" file="AndroidManifest.xml" mode="merge" platform="android"> <uses-feature android:name="android.hardware.location" android:required="false"/> </edit-config> <edit-config target="/manifest/uses-feature[@android:name='android.hardware.sensor.compass']" file="AndroidManifest.xml" mode="merge" platform="android"> <uses-feature android:name="android.hardware.sensor.compass" android:required="true"/> </edit-config>
这里把mode改成merge会更稳妥,它会合并现有节点的属性,而不是直接替换。如果节点不存在,merge也会自动添加它。
额外提示
- 你使用的cli-8.0.0对应的Cordova Android版本是
7.1.4,完全支持上述两种写法。 - 配置完成后,可以在PhoneGap Build的编译日志里查看生成的AndroidManifest.xml,确认两个
<uses-feature>都正确添加了。
内容的提问来源于stack exchange,提问作者Chris G
相关产品推荐
相关产品推荐

