Skip to content

unrecognized Attribute name MODULE エラー

問題点

Android 12(API 31)以降のプロジェクトでビルド時に以下のエラーが発生する問題があります:

A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
> java.lang.reflect.InvocationTargetException (no error message)

根本的なエラーはスタックトレースの最後の方に表示されています:

Caused by: java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.SharedNameTable$NameImpl)

このエラーは、Android 12(API 31)以上のコンパイル環境でJDK 8を使用している場合に発生します。AndroidのビルドツールチェーンがJDK 11を必要とするようになったため、互換性の問題が生じています。

解決策

主な解決方法:JDK 11へのアップグレード

この問題を解決するには、プロジェクトで使用するJDKをバージョン11以上にアップグレードする必要があります。

WARNING

JDK 8とAndroid 12(API 31)以上の組み合わせでは動作しません。必ずJDK 11以上を使用してください。

Android Studioでの設定方法

  1. Android Studio Arctic Fox以降では:

    • File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK
    • ドロップダウンからJDK 11を選択
  2. 新しいバージョンのAndroid Studioでは:

    • File > Project Structure > SDK Location タブ
    • 「Gradle Settings」をクリックし、「Gradle JDK」フィールドでJDK 11を選択
    • ドロップダウンの「Download JDK」オプションから直接ダウンロードも可能

手動でのJDK 11インストール

  1. Oracle JDK 11 または OpenJDK 11 をダウンロード
  2. ファイルを解凍し、適切な場所に配置
  3. Android Studioで上記の手順に従いJDKのパスを設定

各種環境別の対応

Flutterプロジェクトの場合

android/app/build.gradle に以下の設定を追加:

kotlin
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

android/build.gradle の依存関係を更新:

kotlin
buildscript {
    ext.kotlin_version = '1.7.10'
    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

CI/CD環境(AppCenterなど)での設定

環境変数に以下を追加:

JAVA_HOME: $(JAVA_HOME_11_X64)

Unityプロジェクトの場合

baseProjectTemplate.gradle ファイルを更新:

kotlin
classpath 'com.android.tools.build:gradle:4.0.1'

Visual Studio for Macの場合

  1. Microsoft JDK 11 をインストール
  2. Tools > SDK Manager > Locations タブでJDKの場所を設定

追加のトラブルシューティング

  1. キャッシュのクリア

    • File > Invalidate Caches / Restart で完全再起動
  2. 古いリポジトリの削除

    • build.gradle から jcenter() や古いMavenリポジトリを削除
  3. プロガード設定の確認

    • gradle.properties から android.enableR8=true を削除
    • app/build.gradle から useProguard true を削除

TIP

この問題はLambda式を使用しているコードで特に発生しやすいですが、JDK 11にアップグレードすれば解決します。

根本原因

Android 12(API 31)の android.jar には、JDK 8では認識できない新しいアノテーション属性「MODULE」が含まれており、これがコンパイルエラーの原因となっています。JDK 11ではこの属性が正しく処理されるため、問題は解決します。

まとめ

unrecognized Attribute name MODULE エラーは、Android 12以降のビルド環境においてJDKのバージョン不一致が原因で発生します。以下の手順で解決できます:

  1. JDK 11以上をインストール
  2. Android Studioの設定でJDK 11を指定
  3. 必要に応じてビルドスクリプトを更新
  4. CI/CD環境でもJDKバージョンを確認

Android開発環境は常に進化しており、最新のAPIを利用するには対応するツールチェーンのアップデートが必要です。定期的な環境の見直しを行うことをおすすめします。