【问题标题】:Android Build Error when using the barcodescanner and qrscanner at the same time同时使用条形码扫描仪和二维码扫描仪时的Android构建错误
【发布时间】:2018-12-25 02:29:15
【问题描述】:

当我在一个项目中同时使用 phonegap-plugin-barcodescanner 插件和 cordova-plugin-qrscanner 插件时,它不会为 android 平台编译。它输出的错误是清单中的重复权限元素。经过检查,我发现情况确实如此。但是手动更正不起作用,因为它会自动重新生成。

我进一步记录了复制场景。这很简单。也许有人知道如何解决这个问题?或者你认为这是一个错误?但是在这种情况下我应该在哪里打开问题呢?

使用过的版本: 离子:3.20.0 科尔多瓦:8.0.0

重现步骤:

  1. 开始一个新项目ionic start permissionissue blank(当它询问是否应该与iOS和Android平台集成时说是,当它要求安装ProSDK时说不
  2. 进入项目文件夹:cd permissionissue
  3. 构建它:ionic cordova build --release android -> 一切都很好
  4. 安装第一个插件:ionic cordova plugin add phonegap-plugin-barcodescanner
  5. 构建它:ionic cordova build --release android -> 一切都很好
  6. 安装第二个插件:ionic cordova plugin add cordova-plugin-qrscanner
  7. 尝试构建它:ionic cordova build --release android -> 现在它坏了

它会显示以下错误:

> Manifest merger failed with multiple errors, see logs

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or 
--debug
 option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 4s
23 actionable tasks: 3 executed, 20 up-to-date

(node:12659) UnhandledPromiseRejectionWarning: Error: .../permissionissue/platforms/android/gradlew: Command failed with exit code 1 Error output:
.../permissionissue/platforms/android/app/src/main/AndroidManifest.xml:19:5-90 Error:
    Element uses-permission#android.permission.CAMERA at AndroidManifest.xml:19:5-90 duplicated with element declared at AndroidManifest.xml:16:5-65
.../permissionissue/platforms/android/app/src/main/AndroidManifest.xml:20:5-85 Error:
    Element uses-feature#android.hardware.camera at AndroidManifest.xml:20:5-85 duplicated with element declared at AndroidManifest.xml:18:5-84
.../permissionissue/platforms/android/app/src/main/AndroidManifest.xml Error:
    Validation failed, exiting

FAILURE: Build failed with an exception.

生成的 Manifest 如下所示:

    <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-permission android:name="android.permission.CAMERA" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />

如您所见,CAMERA 曾经被自己请求一次,并且一次被要求为 false。

【问题讨论】:

    标签: ionic-framework ionic3 ionic-native


    【解决方案1】:

    我在使用 cordova-plugin-camera-preview 和 cordova-plugin-qrscanner 时遇到了类似的问题

    帮助我的是: 1. 进入plugins/cordova-plugin-qrscanner/plugin.xml

    1. 删除
    2. 中的条目

    <config-file target="AndroidManifest.xml" parent="/*"> ... </config-file>

    1. 运行 ionic cordova platform remove android

    2. 运行 ionic cordova platform add android

    这就是我的&lt;platform&gt; 部分的样子,来自plugin.xmlcordova-plugin-qrscanner

    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
          <feature name="QRScanner">
            <param name="android-package" value="com.bitpay.cordova.qrscanner.QRScanner"/>
          </feature>
        </config-file>
        <config-file target="AndroidManifest.xml" parent="/*">
          <!-- <uses-permission android:name="android.permission.CAMERA" android:required="false" />
          <uses-feature android:name="android.hardware.camera" android:required="false" />
          <uses-feature android:name="android.hardware.camera.front" android:required="false" /> -->
        </config-file>
        <source-file src="src/android/QRScanner.java" target-dir="src/com/bitpay/cordova/qrscanner"/>
        <framework src="src/android/qrscanner.gradle" custom="true" type="gradleReference"/>
      </platform>
    

    为我工作,希望对你也有帮助。

    【讨论】:

    • 我尝试了您的建议并删除了以下行: 但现在无法编译
    • 它给出了以下(以及更多)错误: :app:javaPreCompileRelease /.../permissionissue/platforms/android/app/src/main/java/com/phonegap/plugins/barcodescanner/BarcodeScanner .java:179: 错误: 找不到符号 intentScan.putExtra(Intents.Scan.SHOW_FLIP_CAMERA_BUTTON, obj.optBoolean(SHOW_FLIP_CAMERA_BUTTON, false)); ^ 符号:变量 SHOW_FLIP_CAMERA_BUTTON 位置:扫描类
    • 如果我理解正确,您删除了&lt;config-file&gt; 的整个部分,但我只注释掉了这个标签中的内容,如下所示:&lt;config-file target="AndroidManifest.xml" parent="/*"&gt; &lt;!-- &lt;uses-permission android:name="android.permission.CAMERA" android:required="false" /&gt; &lt;uses-feature android:name="android.hardware.camera" android:required="false" /&gt; &lt;uses-feature android:name="android.hardware.camera.front" android:required="false" /&gt; --&gt; &lt;/config-file&gt;
    • 我又试了一次,只是注释掉了一个 uses-permission 和两个 uses-feature 标签。我仍然遇到同样的错误。
    • 我已将cordova-plugin-qrscanner 中的整个&lt;platform&gt; 部分添加到答案中。您是否再次执行了所有步骤?
    最近更新 更多