Cordova Android duplicated uses-feature from two plugins

前端 未结 7 2035
无人共我
无人共我 2020-12-10 02:12

I am using two different plugins into cordova, which both have the same uses-feature, one with android:required=\"false\" and one without.

相关标签:
7条回答
  • 2020-12-10 02:24

    This is how it finally worked for us in our Ionic 3 project. You should remove one of the duplicate entries from platforms/android/AndroidManifest.xml:

    <manifest ...>
        ...
        <uses-feature android:name="android.hardware.camera"/>
        ...
        <uses-feature android:name="android.hardware.camera" android:required="true" />
    </manifest>
    

    And also from platforms/android/android.json:

    {
      "xml": "<uses-feature android:name=\"android.hardware.camera\" />",
      "count": 1
    },
    ...
    {
      "xml": "<uses-feature android:name=\"android.hardware.camera\" android:required=\"true\" />",
      "count": 1
    }
    

    PS: We do this tweak only when adding the Android platform, not at every build.

    0 讨论(0)
  • 2020-12-10 02:31

    The following steps helped me solve this problem:

    1. Remove duplicate elements from your config.xml

    2. Remove duplicate objects from platform/android/android.json file.

    3. Remove duplicate elements from platform/android/app/src/main/AndroidManifest.xml file.

    4. Close your IDE/Text Editor (Specially if you are using VS Code).

    5. Now run 'cordova build android'.

    0 讨论(0)
  • 2020-12-10 02:32

    1.Open plugins/[your plugin name]/plugin.xml

    2.remove this line:

    `<uses-feature android:name="android.hardware.camera" android:required="false" />`
    

    3. rebuild your project

    0 讨论(0)
  • 2020-12-10 02:33

    simple cmd for your problem:

    cordova clean 
    cordova build
    
    0 讨论(0)
  • 2020-12-10 02:34

    I had the sane issue with cordova-plugin-camera and phonegap-plugin-barcodescanner. My fix:

    ionic cordova platform rm android
    ionic cordova platform rm ios    
    ionic cordova plugin rm phonegap-plugin-barcodescanner
    rm -r plugins
    rm -r node_modules
    rm package-lock.json
    

    Next remove the phonegap-plugin-barcodescanner of the package.json. Run:

    npm install
    ionic cordova platform add android
    

    Next do a new build:

    ionic cordova run android
    

    Next add the plugin again:

    ionic cordova plugin add phonegap-plugin-barcodescanner
    
    0 讨论(0)
  • 2020-12-10 02:42

    None of the above solutions were satisfying because you need to modify some generated output or tweak some plugins. There are only "temporary" fixes. We should be able to solve this issue by only modifying our source code.

    Since Cordova 6.4+, we can take advantage of the edit-config tag in the config.xml file. The following solution is also great for CI and automated builds.

    It has been tested for a similar scenario where two cordova plugins defined the same <uses-feature> name:

    /Users/me/dev/wkspace/project/cordova/platforms/android/app/src/main/AndroidManifest.xml:55:5-66 Error:
            Element uses-feature#android.hardware.location.gps at AndroidManifest.xml:55:5-66 duplicated with element declared at AndroidManifest.xml:50:5-90
    /Users/me/dev/wkspace/project/cordova/platforms/android/app/src/main/AndroidManifest.xml Error:
            Validation failed, exiting
    

    AndroidManifest.xml snippet:

        <!-- ... -->
        <uses-feature android:name="android.hardware.location.gps" android:required="true" />
        <uses-feature android:name="android.hardware.location.gps" />
        <!-- ... -->
    

    Solution:

    Within config.xml:

       <platform name="android">
            <!-- ... -->
            <edit-config file="app/src/main/AndroidManifest.xml" mode="overwrite" target="/manifest/uses-feature[@android:name='android.hardware.location.gps']">
                <uses-feature android:name="android.hardware.location.gps" />
            </edit-config>
       </platform>
    
    

    When building, errors are gone.

    So, as for the issue described by author, you could try to add the following in the config.xml:

    <edit-config file="app/src/main/AndroidManifest.xml" mode="overwrite" target="/manifest/uses-feature[@android:name='android.hardware.camera']">
        <uses-feature android:name="android.hardware.camera" />
    </edit-config>
    
    <edit-config file="app/src/main/AndroidManifest.xml" mode="overwrite" target="/manifest/uses-feature[@android:name='android.hardware.camera.autofocus']">
        <uses-feature android:name="android.hardware.camera.autofocus" />
    </edit-config>
    
    0 讨论(0)
提交回复
热议问题