You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:38:29