私は 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-config
Cordova 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-feature
plugin.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@8
、cordova-android@9