【Android】com.google.android.material:materialとandroidx.appcompat:appcompatをimplementationするとエラーが発生する

はじめに

こんにちは、SHOJIです。
Android開発にて、複数ライブラリをimplementationしたときにエラーが発生するという事象に遭遇しました。

implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.appcompat:appcompat:1.4.0'

エラーが発生

最初に出たエラーがこちらです。

/xxxxx/src/main/res/values/attrs.xml:12:1: Duplicate value for resource 'attr/backgroundColor' with config 'DEFAULT' and product ''. Resource was previously defined here: /root/.gradle/caches/transforms-2/files-2.1/97ed20c4805122cb37926be8f7f55040/material-1.4.0/res/values/values.xml:2976:4: .

これに対しては、Resource was previously defined hereという一文があったので、attrs.xmlとライブラリで二重に定義されている?と考え、attrs.xml:12:1の一行を削除しました。

すると今度はこちらのエラーが出てきました。

ERROR:/home/n/Android/common/build/intermediates/res/merged/release/values/values.xml:6183: AAPT: error: resource android:attr/lStar not found.

lStarが見つからないと言っていますね。

何をやったら直ったか

androidx.appcompat:appcompatのバージョンを1.0.0に変更しました。

implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.appcompat:appcompat:1.0.0'

単純に、androidx.appcompat:appcompat:1.4.0でlStarがなくなってそれで出ていたようです。

不思議なのが、このようにcom.google.android.material:materialだけにしてもエラーは解消されるんですよね。

implementation 'com.google.android.material:material:1.4.0'

一つ目のエラーが消えるのは二重定義だとすると納得なのですが、lStarがない方のエラーも出ないのは不思議です。

ここから考えられることは、僕のプロジェクトはlStarを必要としてなくて、androidx.appcompat:appcompat:1.4.0lStarを必要としているということなのですが、それだと致命的なエラーなので放置されているのはおかしく、何か理解が足りていないように思います。

こういう事象もあったので、記事のタイトルは二つのライブラリを参照するとエラーが発生するとしています。

最後に

まとめるとチョロいエラーに見えるのですが、実際は丸三日は悩みました。

ハマった理由としては、二つエラーがあったことで attrs.xml:12:1の一行を削除したからlStarのエラーが出てきたんじゃないか?という誤解が生まれ、attrs.xml:12:1の行を残しつつ Duplicate value for resource エラーを解消する方法を調査していたのが大きいですね。

そしてなぜそう考えたかと言えば、1.0.0にあったものがbeta版でもないのに1.4.0でなくなっているわけないだろうと考えたからです。 そもそも様々なエラーが出てあれこれ直した最中に出てきたので、絶対に自分の作業ミスだと思っていましたから、ライブラリの問題ではないという先入観がありました。

Androidのビルドってたまに本質でないエラーメッセージを出すことがあって、メッセージを信じられなかったことも敗因だと思います。
まとめると、思い込みは危険ってことですね。重々承知していたつもりなんですけれど……笑

以上です。