同时使用条码和二维码扫描插件导致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插件来简化配置:
- 安装插件:
ionic cordova plugin add cordova-custom-config npm install @ionic-native/custom-config
- 在
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
相关产品推荐
相关产品推荐

