Skip to content

android:attr/lStar エラーの解決方法

この記事では、Android アプリ開発で発生する「error: resource android:attr/lStar not found」エラーの原因と効果的な解決策について詳しく解説します。

問題の概要

このエラーは、Android リソースリンク処理中に発生し、以下のようなメッセージが表示されます:

Android resource linking failed
AAPT: error: resource android:attr/lStar not found.

主な原因は、プロジェクト内で使用されている Android SDK バージョンと依存ライブラリの SDK バージョンに互換性がないことにあります。特に、Flutter や React Native などのクロスプラットフォームフレームワークを使用している場合によく発生します。

根本原因

lStar 属性は Android SDK バージョン 31(Android 12)で導入された機能です。このエラーは通常、以下の状況で発生します:

  • プロジェクトの compileSdkVersion が 31 未満である
  • 使用しているライブラリが最新の Android SDK に依存している
  • 異なるライブラリ間で SDK バージョンに一貫性がない

解決方法

ここからは、実際に効果的な解決策をいくつか紹介します。

方法1: compileSdkVersion と targetSdkVersion の更新

最も基本的な解決策は、プロジェクトの SDK バージョンを更新することです。

android/app/build.gradle ファイルを開き、以下のように修正します:

groovy
android {
    compileSdkVersion 34
    // buildToolsVersion "34.0.0" // 必要に応じて追加
    // ...
    
    defaultConfig {
        targetSdkVersion 34
        // ...
    }
}

TIP

Android Studio の最新バージョンを使用している場合、buildToolsVersion の指定は不要な場合があります。

方法2: サブプロジェクトの設定を強制適用(Flutter向け)

Flutter プロジェクトでは、依存パッケージが古い SDK バージョンを使用している場合があります。android/build.gradle ファイルに以下の設定を追加します:

groovy
subprojects {
    afterEvaluate { project ->
        if (project.plugins.hasPlugin("com.android.application") ||
                project.plugins.hasPlugin("com.android.library")) {
            project.android {
                compileSdkVersion 34
                buildToolsVersion "34.0.0"
            }
        }
    }
    
    project.buildDir = "${rootProject.buildDir}/${project.name}"
    project.evaluationDependsOn(':app')
}

方法3: 安全なバージョン強制アプローチ

より安全な方法として、古いバージョンのみを更新する方法もあります:

groovy
subprojects {
    afterEvaluate { project ->
        if (project.extensions.findByName("android") != null) {
            Integer pluginCompileSdk = project.android.compileSdk
            if (pluginCompileSdk != null && pluginCompileSdk < 31) {
                project.logger.error(
                        "Warning: Overriding compileSdk version in Flutter plugin: "
                                + project.name
                                + " from "
                                + pluginCompileSdk
                                + " to 31"
                )
                project.android {
                    compileSdk 31
                }
            }
        }
    }
    
    project.buildDir = "${rootProject.buildDir}/${project.name}"
    project.evaluationDependsOn(":app")
}

この方法のメリット:

  • 影響を受けるプラグインのみを更新する
  • 問題のあるプラグインを特定しやすい
  • 最小限の変更で問題を解決できる

注意

この方法は一時的な解決策です。根本的にはパッケージの更新を依頼するか、メンテナンスされている代替パッケージへの移行を検討してください。

方法4: 依存関係のバージョン固定

特定のライブラリが原因である場合は、バージョンを固定することで解決できます:

groovy
configurations.all {
    resolutionStrategy {
        force 'androidx.core:core:1.6.0'
        force 'androidx.core:core-ktx:1.6.0'
        force 'androidx.appcompat:appcompat:1.3.0'
    }
}

方法5: 非推奨パッケージの置き換え

メンテナンスが終了したパッケージを使用している場合、代替パッケージへの移行を検討してください。例:

  • image_gallery_savergal パッケージ
  • その他、最新版が利用可能なパッケージへの更新

Kotlin DSL (build.gradle.kts) を使用している場合

Kotlin DSL を使用している場合は、以下のように記述します:

kotlin
subprojects {
    afterEvaluate {
        if (plugins.hasPlugin("com.android.application") || plugins.hasPlugin("com.android.library")) {
            extensions.findByType<com.android.build.gradle.BaseExtension>()?.apply {
                compileSdkVersion(34)
                buildToolsVersion("34.0.0")
            }
        }
    }
    project.evaluationDependsOn(":app")
}

問題の診断方法

エラーの原因を特定するために、以下の手順を試してみてください:

  1. ./gradlew build --stacktrace で詳細なエラーログを確認
  2. エラーメッセージから問題のライブラリを特定
  3. 該当ライブラリの GitHub イシューを検索
  4. ライブラリの最新バージョンが利用可能か確認

予防策

今後同様の問題を防ぐために:

  • 定期的にパッケージを更新する
  • サポート終了したパッケージを使用しない
  • CI環境で定期的にビルドテストを実行する
  • 主要な依存関係の変更ログを確認する

まとめ

android:attr/lStar not found エラーは、SDK バージョンの不一致が主な原因です。プロジェクト全体で一貫した SDK バージョンを使用することで、この問題を解決できます。一時的な修正よりも、可能な限りパッケージの更新や適切なバージョン設定を行うことをお勧めします。

INFO

Android 開発では、定期的な依存関係の更新と最新のビルドツールの使用が、ビルド問題を防ぐ最も効果的な方法です。