Android Studioでアプリをビルドした際に、
「attribute not found」
というエラーが表示されることがあります。
このエラーは、XMLレイアウトやテーマ、スタイルなどで指定している属性を、
Android Studioが認識できない場合に発生します。
原因としては、属性名の入力ミス、存在しない属性の指定、
必要なライブラリが追加されていない、
compileSdkが不足している、
テーマやライブラリのバージョンが合っていないなどが考えられます。
この記事では、Android Studioで
「attribute not found」が表示された場合に確認したい主な原因と、
基本的な解決方法を紹介します。
「attribute not found」とは
AndroidのXMLでは、
Viewのサイズ、色、文字、配置、テーマなどを設定するために
さまざまな属性を使用します。
例えば、TextViewでは次のような属性を指定できます。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello" />
この例では、
android:layout_width、
android:layout_height、
android:text
が属性です。
XML内で指定した属性が存在しない場合や、
現在のSDKやライブラリでは利用できない場合、
「attribute not found」
などのエラーが表示されます。
「attribute not found」は、
属性名そのものの間違いだけでなく、
SDKやライブラリのバージョン、
XML名前空間、
テーマの設定などが原因で発生することもあります。
エラーログに表示されている属性名を確認することが重要です。
主な原因
属性名を間違えている
最も基本的な原因の一つが、
属性名の入力ミスです。
誤った例
android:textColr="#000000"
正しい例
android:textColor="#000000"
この例では、
textColorを
textColrと入力しているため、
Android Studioが属性を認識できません。
エラーログに表示されている属性名と、
実際に使用できる属性名を確認してください。
存在しない属性を指定している
Androidでは利用できない属性をXMLに記述すると、
attribute not foundが発生することがあります。
android:unknownAttribute="value"
属性名のスペルが正しくても、
そのViewやテーマで利用できない属性であれば
エラーになる場合があります。
android:とapp:を間違えている
AndroidのXML属性には、
android:で指定するものと、
app:で指定するものがあります。
Android標準の属性は
android:を使用することが多く、
AndroidXやMaterial Componentsなどが提供する属性では
app:を使用する場合があります。
app:layout_constraintTop_toTopOf="parent"
ConstraintLayoutで使用する属性を
誤ってandroid:で指定すると、
属性を認識できずエラーになることがあります。
XML名前空間が定義されていない
app:などの属性を使用する場合は、
XMLファイル内で名前空間が定義されている必要があります。
xmlns:app="http://schemas.android.com/apk/res-auto"
この定義がない状態で
app:属性を使用すると、
XML側で正しく認識されない場合があります。
必要なライブラリが追加されていない
ConstraintLayoutやMaterial Componentsなど、
外部ライブラリが提供する属性を使用している場合は、
対応するライブラリがプロジェクトに追加されている必要があります。
ライブラリが存在しない場合、
XMLに記述した属性をAndroid Studioが解決できないことがあります。
dependencies {
implementation("androidx.constraintlayout:constraintlayout:...")
}
使用しているViewや属性に必要な依存関係が
Gradleに設定されているか確認してください。
ライブラリのバージョンが古い
新しい属性を使用しているにもかかわらず、
プロジェクトで使用しているライブラリのバージョンが古い場合、
その属性が存在しないことがあります。
サンプルコードや新しいドキュメントを参考にして実装した直後に
attribute not foundが発生した場合は、
使用しているライブラリのバージョンを確認してください。
compileSdkが不足している
使用しようとしているAndroid標準属性が、
プロジェクトで設定している
compileSdkより新しいSDKで追加されたものである場合、
属性を認識できないことがあります。
build.gradleまたは
build.gradle.ktsで
compileSdkを確認します。
android {
compileSdk = 36
}
使用している属性が要求するSDKと、
プロジェクトのcompileSdkが合っているか確認してください。
themes.xmlやstyles.xmlで属性を間違えている
attribute not foundは、
レイアウトXMLだけでなく
themes.xmlや
styles.xmlでも発生することがあります。
<item name="colorPrimary">@color/purple_500</item>
使用している親テーマやライブラリによっては、
指定した属性が利用できない場合があります。
テーマを変更した直後や、
Material Componentsなどのライブラリを更新した直後にエラーが発生した場合は、
テーマと属性の組み合わせを確認してください。
カスタム属性が正しく定義されていない
独自Viewなどでカスタム属性を使用している場合は、
attrs.xmlに属性を定義する必要があります。
<resources>
<declare-styleable name="CustomView">
<attr name="customColor" format="color" />
</declare-styleable>
</resources>
XML側でカスタム属性を使用しているにもかかわらず、
attrs.xmlに定義が存在しない場合は、
属性を見つけられないことがあります。
解決方法
エラーログに表示されている属性名を確認する
attribute not foundが表示された場合は、
まずBuild Outputを確認します。
error: attribute layout_constraintTop_toTopOf not found.
この場合は、
layout_constraintTop_toTopOf
という属性をAndroid Studioが見つけられないことを示しています。
属性名のスペル、
名前空間、
必要なライブラリなどを確認してください。
属性名のスペルを確認する
エラーログに表示された属性名と、
XMLに記述している属性名を確認します。
文字の抜けや入力間違いがないか、
正しい属性名と比較してください。
android:とapp:を確認する
属性の先頭に指定している
android:または
app:が正しいか確認します。
app:layout_constraintStart_toStartOf="parent"
特にConstraintLayoutやMaterial Componentsなどでは、
app:属性を使用することがあります。
必要なライブラリを確認する
エラーになっている属性が
AndroidXやMaterial Componentsなどのライブラリ由来である場合は、
対応する依存関係が追加されているか確認します。
ライブラリを追加または変更した場合は、
Gradle Syncも実行してください。
compileSdkを確認する
Android標準の新しい属性を使用している場合は、
プロジェクトの
compileSdkを確認します。
必要なSDKよりcompileSdkが低い場合は、
対応するSDKへ更新することで解決する場合があります。
テーマとスタイルを確認する
themes.xmlや
styles.xmlでエラーが発生している場合は、
使用している親テーマと属性の組み合わせを確認します。
最近テーマやライブラリを変更した場合は、
変更前後の設定を比較すると原因を特定しやすくなります。
Gradle Syncを実行する
ライブラリやSDK設定を変更した場合は、
Android Studioから
Sync Project with Gradle Files
を実行します。
Gradle Syncに別のエラーが表示される場合は、
そちらを先に修正してください。
Clean ProjectとRebuild Projectを実行する
属性やライブラリの設定に問題が見つからない場合は、
ビルド生成物を削除して再ビルドすることで
解決する場合があります。
Android Studioのメニューから
Build → Clean Project
を実行し、その後
Build → Rebuild Project
を実行します。
キャッシュを再構築する
XML、ライブラリ、SDKの設定に問題がなく、
Android Studio側のインデックスやキャッシュに問題があると考えられる場合は、
File → Invalidate Caches
を試します。
キャッシュを削除してAndroid Studioを再起動し、
プロジェクトを再度ビルドします。
Invalidate Cachesは最後に試す方法の一つです。
最初にキャッシュを削除するのではなく、
まずエラーログに表示されている属性名、
XMLの記述、ライブラリ、compileSdkなどを確認してください。
エラーが直らない場合に確認したいポイント
attribute not foundが解消しない場合は、
次の点を順番に確認すると原因を特定しやすくなります。
- エラーログに表示されている属性名を確認する
- 属性名のスペルが正しいか確認する
- その属性が実際に存在するか確認する
- android:とapp:の指定が正しいか確認する
- XML名前空間が定義されているか確認する
- 必要なライブラリが追加されているか確認する
- ライブラリのバージョンが適切か確認する
- compileSdkが不足していないか確認する
- themes.xmlやstyles.xmlの属性を確認する
- カスタム属性の場合はattrs.xmlを確認する
- Gradle Syncを実行する
- Clean ProjectとRebuild Projectを実行する
- 必要に応じてInvalidate Cachesを実行する
まとめ
「attribute not found」は、
Android StudioがXMLやテーマ、スタイルなどで指定された属性を
見つけられない場合に発生するエラーです。
特に多い原因は、
属性名の入力ミス、
android:とapp:の指定間違い、
必要なライブラリの不足、
ライブラリやcompileSdkのバージョン不足、
テーマと属性の不整合です。
エラーが表示された場合は、
Build Outputに表示されている
「attribute ○○ not found」
の○○部分を確認し、
その属性がどこで定義され、どのライブラリやSDKに属しているかを
確認することが重要です。
属性名やXML、ライブラリ、SDK設定を修正したうえで、
Gradle Sync、Clean Project、Rebuild Projectなどを順番に試すことで、
多くの場合は解決できます。
