Ошибка сборки Android при одновременном использовании barcodescanner и qrscanner - PullRequest
0 голосов
/ 27 мая 2018

Когда я одновременно использую плагин phonegap-plugin-barcodescanner и плагин cordova-plugin-qrscanner в проекте, он не будет компилироваться для платформы Android.Ошибка, которую он выводит, является дублирующим элементом разрешения в манифесте.После проверки я увидел, что это действительно так.Однако ручная коррекция не работает, так как она будет восстановлена ​​автоматически.

Я задокументировал сценарий воспроизведения ниже.Это очень просто.Может быть, у кого-то есть идеи, как решить эту проблему?Или вы думаете, что это ошибка?Но где мне открыть вопрос в таком случае?

Используемая версия: Ionic: 3.20.0 cordova: 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.

Сгенерированный манифест выглядит следующим образом:

    <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" />

Как вы можете видеть, КАМЕРА однажды запрашивается сама по себе, а однажды с требуемым ложным.

1 Ответ

0 голосов
/ 16 ноября 2018

У меня была похожая проблема с использованием cordova-plugin-camera-preview & cordova-plugin-qrscanner

Что мне помогло: 1. Перейдите на страницу plugins / cordova-plugin-qrscanner / plugin.xml

удалить записи в пределах

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

run ionic cordova platform remove android

run ionic cordova platform add android

Так выглядит мой <platform> раздел изplugin.xml из cordova-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>

Сработало для меня, надеюсь, оно вам тоже поможет.

...