⚡
【Flutter】Can't determine type Can't detfor tag '<macro name="...">'...
背景
Flutter SDKのバージョンアップを行なった後、Androidビルド時に以下のエラーに遭遇しました。
Can't determine type for tag '<macro name="m3_comp_bottom_app_bar_container_color">?attr/colorSurface</macro>'
考えられる原因
バージョンアップにより、依存関係にあるMaterialライブラリ (com.google.android.material)も更新され、古いタグを参照することができなくなってしまったものと思われます。
解決策
調査したところ、以下の2つのうち、どちらかの対応が必要。
- Gradle v.7.3.3以降にアップデート
- または、依存するcom.google.android.materialを 1.6.0 に据え置く(ダウングレード)
dependencies {
// ...
implementation 'com.google.android.material:material:1.6.0'
ただし、自分の場合はFlutterプロジェクトとして直接build.Gradleにcom.google.android.material
の指定がなかったので、Gradle v.7.3.3以降にアップデートする方法としました。
Gradleのアップデート
7.3.3に更新して、ビルドしてみます。
dependencies {
classpath 'com.android.tools.build:gradle:7.3.3'
エラー!
Could not find com.android.tools.build:gradle:7.3.3.
Searched in the following locations:
- ....
バージョン確認
調べたところ、7.3.3
はリリースされていませんでした。リリースバージョンは以下から確認できます。
改めて、利用可能なバージョンでビルド。
```androld/build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
gradle-wrapper.propertiesの更新
7.4.2にしていたらエラーが出たので、その通り更新します。
A problem occurred evaluating project ‘:app’.
> Failed to apply plugin ‘com.android.internal.version-check’.
> Minimum supported Gradle version is 7.5. Current version is 7.4.2. If using the gradle wrapper, try editing the distributionUrl in /Users/kanoufivot/dev/idare/android/gradle/wrapper/gradle-wrapper.properties to gradle-7.5-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
AndroidManifestの更新
さらにエラー。
* What went wrong:
Execution failed for task ‘:app:processDevDebugMainManifest’.
> Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:23:9-36
is also present at [com.appsflyer:af-android-sdk:6.14.0] AndroidManifest.xml:32:9-35 value=(true).
Suggestion: add ‘tools:replace=“android:allowBackup”’ to <application> element at AndroidManifest.xml:4:5-18:19 to override.
利用しているライブラリで android:allowBackup="true" が指定されているときに、自分のアプリで android:allowBackup="false" を指定するとマニフェストのマージに失敗してビルドエラーになります。
tools:replace="android:allowBackup"
を使用するために、manifestにxmlns:tools="http://schemas.android.com/tools"
の指定も必要になります。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="...">
<application
android:allowBackup="false"
tools:replace="android:allowBackup"
...>
ビルド成功
上記修正にて、無事ビルドが通りました。
参考
Discussion