AndroidビルドのAndroidManifest.xml設定重複エラーについて
Monacaチームの小田川です。
Androidビルドを行った際に、下記のようなエラーが発生する場合があります。
Element xxx at AndroidManifest.xml:xx:x-xx duplicated with element declared at AndroidManifest.xml:xx:x-xx
上記のエラーは、複数のCordovaプラグインが、AndroidManifest.xmlに対して同じ項目の設定を行なっているために、設定の重複が発生したエラーになります。
Android OSのバージョンアップの際には、仕様変更が発生するケースが多くあります。仕様変更の内容によっては、Cordovaプラグイン側でも対応が必要になります。このような場合、仕様変更に対応しているCordovaプラグインと対応してないCordovaプラグインが存在する可能性があり、特に開発が終了しているCordovaプラグインを使い続けているような場合は、上記のようなエラーが発生する可能性が大きくなります。
今回は、AndroidManifest.xmlに対する設定の重複エラー対応について説明していきたいと思います。
AndroidManifest.xmlの設定について
今回説明するAndroidManifest.xmlに対する設定の重複について、Cordova側の仕様として、複数のCordovaプラグインが、AndroidManifest.xmlに対して同じ項目の設定を行なっている場合、設定内容が同じ場合は、対象の設定は重複とは判断されずにビルドを行うことができます。
具体例として、下記のCordovaプラグインのplugin.xmlでは、AndroidManifest.xmlに対してandroid.hardware.location.gps
設定が行われています。
cordova-plugin-geolocation@4.0.2までのplugin.xmlでは、下記の設定が行われています。また、cordova-plugin-googlemaps@2.7.1のplugin.xmlでも下記の設定が行われています。
<uses-feature android:name="android.hardware.location.gps" />
上記のCordovaプラグインバージョンの場合は、正常にビルドを行うことができます。
cordova-plugin-geolocation@4.1.0からは、上記の設定は、下記のように変更されています。
<uses-feature android:name="android.hardware.location.gps" android:required="$GPS_REQUIRED" />
変更された設定では、android:required
属性が追加されているため、cordova-plugin-googlemapsの設定内容とは異なる形になりました。同じandroid.hardware.location.gpsに対する設定ですが、設定されている属性が異なるため、ビルドの際に別の設定と判断され、下記のような設定重複エラーが発生します。
Element uses-feature#android.hardware.location.gps at AndroidManifest.xml:22:5-66 duplicated with element declared at AndroidManifest.xml:18:5-90
設定重複エラーの対応方法
今回のようなAndroidManifest.xmlに対する重複設定エラーに対応する場合は、下記のような対応を行う必要があります。
- 重複している設定を削除する。
- 重複している設定を同じ設定にする。
重複している設定を削除する場合
Cordovaプラグインに設定されている重複設定を削除する場合、最新のAndroid OSに対応している場合があるため、基本的に更新日が新しい方のCordovaプラグインの設定を残し、更新日が古い方のCordovaプラグインの設定を削除します。
今回の例の場合、cordova-plugin-geolocation@4.1.0は、2020年11月6日にリリースされたバージョンになり、cordova-plugin-googlemapsは、2020年4月9日に2.7.1がリリースされて以降、最新版は、リリースされていません。そのため、今回は、cordova-plugin-googlemaps@2.7.1側の設定を削除したカスタム版のCordovaプラグインを作成し、作成したカスタム版のCordovaプラグインを利用する形になります。
cordova-plugin-googlemaps側の重複設定を削除したカスタム版のCordovaプラグインを利用することで、ビルド時の設定重複エラーに対応することができます。
重複している設定を同じ設定にする場合
Cordovaプラグインに設定されている重複設定を同じ設定にする場合も、最新のAndroid OSに対応している場合があるため、基本的に更新日が新しい方のCordovaプラグインの設定に合わせます。今回の例の場合では、cordova-plugin-geolocation@4.1.0の設定に合わせたcordova-plugin-googlemapsのカスタム版Cordovaプラグインを作成する形になります。