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

同时使用条码和二维码扫描插件导致Android构建失败

解决Ionic 3 + Cordova 8同时集成两个扫码插件的Android Manifest重复权限问题

我之前在Ionic 3.20.0和Cordova 8.0.0环境下同时用phonegap-plugin-barcodescanner和cordova-plugin-qrscanner时,也碰到过一模一样的问题——Android构建失败,提示Manifest里android.permission.CAMERA和android.hardware.camera元素重复,手动改Manifest完全没用,因为构建过程会自动重新生成重复内容。

问题复现步骤

  • 创建新项目:ionic start permissionissue blank(选择iOS和Android平台,不安装ProSDK)
  • 进入项目目录:cd permissionissue
  • 首次构建验证:ionic cordova build --release android,构建正常
  • 安装第一个扫码插件:ionic cordova plugin add phonegap-plugin-barcodescanner,构建仍正常
  • 安装第二个扫码插件:ionic cordova plugin add cordova-plugin-qrscanner
  • 再次构建:ionic cordova build --release android,构建失败,提示Manifest合并冲突

错误核心是两个插件都向AndroidManifest.xml中添加了相机权限和硬件特性,但一个标记为必填,另一个标记为非必填,导致Manifest合并时冲突。

解决方案:通过config.xml统一配置覆盖插件的重复声明

Cordova允许我们在config.xml中自定义AndroidManifest的配置,强制统一权限和特性的声明,这样就能覆盖掉两个插件自动添加的重复内容。

方法1:直接用Cordova原生的config-file和edit-config标签

在项目根目录的config.xml中,找到<platform name="android">节点,添加以下配置(根据你的需求调整android:required的值,这里以设为必填为例):

<platform name="android">
    <!-- 统一声明CAMERA权限 -->
    <config-file parent="/manifest" target="AndroidManifest.xml">
        <uses-permission android:name="android.permission.CAMERA" android:required="true" />
    </config-file>
    <!-- 统一声明相机硬件特性 -->
    <config-file parent="/manifest" target="AndroidManifest.xml">
        <uses-feature android:name="android.hardware.camera" android:required="true" />
        <uses-feature android:name="android.hardware.camera.autofocus" android:required="true" />
    </config-file>
    <!-- 合并并覆盖已有的权限和特性配置 -->
    <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/uses-permission[@android:name='android.permission.CAMERA']">
        <attribute name="android:required">true</attribute>
    </edit-config>
    <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/uses-feature[@android:name='android.hardware.camera']">
        <attribute name="android:required">true</attribute>
    </edit-config>
</platform>

方法2:使用cordova-custom-config插件更灵活管理(推荐)

如果觉得原生标签不够直观,可以用cordova-custom-config插件来简化配置:

  1. 安装插件:
ionic cordova plugin add cordova-custom-config
npm install @ionic-native/custom-config
  1. 在config.xml的Android平台节点下添加:
<platform name="android">
    <custom-config-file target="AndroidManifest.xml" parent="/manifest">
        <uses-permission android:name="android.permission.CAMERA" android:required="true" />
        <uses-feature android:name="android.hardware.camera" android:required="true" />
        <uses-feature android:name="android.hardware.camera.autofocus" android:required="true" />
    </custom-config-file>
</platform>

最后执行清理和重新构建

配置完成后,先清理之前的构建缓存,再重新构建:

ionic cordova clean android
ionic cordova build --release android

这样就能解决Manifest重复权限的问题,构建应该就能正常通过了。

内容的提问来源于stack exchange,提问作者patrickuhlmlann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:28