0
0

Android Gradle Plugin アップデート後の Manifest 競合エラーを回避する方法

Posted at

背景

約7ヶ月振りに Android アプリのアップデートを行うことになり、ついでに Android Gradle Plugin (8.2.1 → 8.5.2) とライブラリのアップデートを行ったところ、アプリの起動時に以下のエラーが発生しました。

Manifest merger failed : Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/gma_ad_services_config) from [com.google.android.gms:play-services-ads-lite:23.3.0] AndroidManifest.xml:92:13-59
	is also present at [com.google.android.gms:play-services-measurement-api:22.0.2] AndroidManifest.xml:32:13-58 value=(@xml/ga_ad_services_config).
	Suggestion: add 'tools:replace="android:resource"' to <property> element at AndroidManifest.xml to override.

どうやら Google Services と AdMob のライブラリ間で設定が競合しているために発生しており、AGP 8.3 以降で顕在化したようです。

この問題は既にGoogleの開発チームに報告されていますが、2024年8月現在、まだ解決には至っていません。

対応

この競合を回避するには、AndroidManifest.xml の <application> 内に以下のプロパティを追加することで対応できます。

<property
    android:name="android.adservices.AD_SERVICES_CONFIG"
    android:resource="@xml/gma_ad_services_config"
    tools:replace="android:resource" />

複数のライブラリが同じプロパティ (android.adservices.AD_SERVICES_CONFIG) を定義しているとき、それぞれが異なるリソースを参照している場合があります。この状況では、ビルド時にどのリソースを使用すべきかが決まらないため、競合が発生します。

この場合、tools:replace="android:resource" を指定することで、そのプロパティが定義される際に他の競合するリソースを無視し、指定されたリソース (@xml/gma_ad_services_config) を優先して使用するように指示します。これにより、複数の定義のうちどれを使うかが明確になるため、競合が解消されます。

しかしこれは優先するリソースを指定しているだけであり、一時的な解決策に過ぎません。根本的な解決は、Google による修正を待つ必要があります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0