工作中接手了一个以前开发的 ionic + angular 做的项目,搭建好开发环境后,用命令行执行编译,结果报错相机权限重复了,报错详情如下:

[cordova] Error: D:\MyWorkSpace\XXX\platforms\android\gradlew: Command failed with exit code 1 Error output:
[cordova] D:\MyWorkSpace\XXX\platforms\android\app\src\main\AndroidManifest.xml:46:5-65 Error:
[cordova]       Element uses-permission#android.permission.CAMERA at AndroidManifest.xml:46:5-65 duplicated with element declared at AndroidManifest.xml:45:5-90
[cordova] D:\MyWorkSpace\XXX\platforms\android\app\src\main\AndroidManifest.xml Error:
[cordova]       Validation failed, exiting
[cordova]
[cordova] FAILURE: Build failed with an exception.
[cordova]
[cordova] * What went wrong:
[cordova] Execution failed for task ':app:processDebugManifest'.
[cordova] > Manifest merger failed with multiple errors, see logs
[cordova]
[cordova] * Try:
[cordova] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[cordova]
[cordova] * Get more help at https://help.gradle.org
[cordova]
[cordova] BUILD FAILED in 19s

看到报错信息,“年轻”的我开始尝试解决:

1、找到报错信息中的AndroidManifest.xml,发现 android.permission.CAMERA 被定义了两次,于是我随意删掉了其中一个,重新开始编译,结果被删的那个权限又被自动加回来了

2、接着我反思了一下,这个xml文件应该只是中间临时生成的文件,还得修改定义这个权限的源文件才行,经过搜索,发现 plugin 插件“cordova-plugin-imagepicker”和“cordova-plugin-qrscanner”的plugin.xml中都定义了这个权限,于是我删掉其中一个权限,重新编译,结果发现还是没有效果

3、再次反思,为啥修改没有生效了,经过查找,原因可能是plugin的修改需要重新添加Android平台才行,于是先移除Android平台重新添加,我移除Android平台的操作步骤是“删除platform/android 文件夹”,我也试过用命令来移除“cordova platform rm android”,但是提示要删一大堆cmd文件,后面重新添加时也报一大堆错,所以就放弃了这个方法

4、然后执行命令“cordova platform add android”重新添加Android平台,如果因为 create.cmd 存在而无法执行则把这个文件删掉再重新添加Android平台即可

5、最后重新触发构建就可以了!

以上是我经过实践验证有效的方法,总结记录一下分享给大家,希望对你有所帮助,码字不易,无效勿喷,谢谢!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐