Cordova Android が 2 つのプラグインから重複した uses-feature を投稿する 質問する

Cordova Android が 2 つのプラグインから重複した uses-feature を投稿する 質問する

私は Cordova に 2 つの異なるプラグインを使用していますが、どちらも同じでuses-feature、1 つはありandroid:required="false"、もう 1 つはなしです。

これにより、ビルド時にエラーが発生します。

processDebugManifest
/path/to/project/platforms/android/AndroidManifest.xml:31:5 Error:
    Element uses-feature#android.hardware.camera at AndroidManifest.xml:31:5 duplicated with element declared at AndroidManifest.xml:27:5
/path/to/project/platforms/android/AndroidManifest.xml:32:5 Error:
    Element uses-feature#android.hardware.camera.autofocus at AndroidManifest.xml:32:5 duplicated with element declared at AndroidManifest.xml:28:5
/path/to/project/platforms/android/AndroidManifest.xml:0:0 Error:
    Validation failed, exiting
:processDebugManifest FAILED
.....
ERROR building one of the platforms: Error: /path/to/project/platforms/android/cordova/build: Command failed with exit code 1
You may not have the required environment or OS to build this project

コンパイルされたマニフェストはビルド時に次のようになります。

...
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
    <uses-feature android:name="android.hardware.camera.flash" android:required="false" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
...

これを修正するために何かできることはありますか?


コルドバ バージョン 5.4.1

ベストアンサー1

上記の解決策はどれも満足できるものではありませんでした。生成された出力の一部を変更したり、プラグインを微調整したりする必要があるためです。「一時的な」修正しかありません。ソース コードを変更するだけでこの問題を解決できるはずです。

edit-configCordova 6.4 以降では、ファイル内のタグを利用できますconfig.xml。次のソリューションは、CI や自動ビルドにも最適です。

2 つの Cordova プラグインが同じ名前を定義する同様のシナリオでテストされています<uses-feature>

/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スニペット:

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

解決策1:

内で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>

ビルド時にエラーがなくなります。

したがって、著者が説明した問題に関しては、次の内容を追加してみてください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>

欠点 (この点を指摘してくれた @jamsandwich に感謝します): 重複するノードが 2 つあるため、ファイルを開くときに警告が表示されますAndroidManifest.xml。ただし、これは単なる警告であり、ビルドはパスするはずです。

2番目の解決策:

をフォークし、ファイル内のタグcordova-plugin-googlemapsを定義するセクションをコメント化するだけです。<use-featureplugin.xml

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

なる

<!--      Comment android.hardware.location.gps as build fails when used along with cordova-plugin-geolocation -->
<!--      <uses-feature android:name="android.hardware.location.gps"/>-->

次に、忘れずに更新して、package.json弊社のフォクバージョンにリンクしてください。

-- 両方のソリューションはcordova-android@8cordova-android@9

おすすめ記事