android build_error ai_generated true

java.lang.UnsupportedClassVersionError: com/example/MyClass has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java runtime only recognizes class file versions up to 55.0

ID: android/kotlin-unsupported-class-version

Also available as: JSON · Markdown · 中文
92%Fix Rate
86%Confidence
1Evidence
2024-01-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Android Gradle Plugin 7.4.0 active
AGP 8.0.0 active
AGP 8.1.0 active
AGP 8.2.0 active
Kotlin 1.8.0 active
Kotlin 1.9.0 active
Kotlin 2.0.0 active
Java 11 active
Java 17 active
Java 21 active

Root Cause

A dependency or project module is compiled with a higher Java bytecode version than the compileSdk or JVM target supports, causing a version mismatch at runtime or build time.

generic

中文

依赖项或项目模块使用比 compileSdk 或 JVM 目标支持的更高的 Java 字节码版本编译,导致运行时或构建时版本不匹配。

Official Documentation

https://developer.android.com/studio/build/gradle-tips#configure-jdk

Workarounds

  1. 90% success Set the Java bytecode version in build.gradle (Module: app): android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } } Ensure the JDK used by Gradle is at least JDK 17 for class file version 61.0. Check with java -version in terminal.
    Set the Java bytecode version in build.gradle (Module: app): android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } } Ensure the JDK used by Gradle is at least JDK 17 for class file version 61.0. Check with java -version in terminal.
  2. 92% success If a dependency is compiled with Java 17 bytecode, update the Gradle JDK in Android Studio: File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK > select JDK 17 or higher. Then rebuild.
    If a dependency is compiled with Java 17 bytecode, update the Gradle JDK in Android Studio: File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK > select JDK 17 or higher. Then rebuild.
  3. 85% success Exclude the offending dependency and use a compatible version. For example, if a library requires bytecode 61.0, find an older version that targets 55.0: implementation('com.example:library:1.0.0') { exclude group: 'com.example' } Then add implementation 'com.example:library:0.9.0'.
    Exclude the offending dependency and use a compatible version. For example, if a library requires bytecode 61.0, find an older version that targets 55.0: implementation('com.example:library:1.0.0') { exclude group: 'com.example' } Then add implementation 'com.example:library:0.9.0'.

中文步骤

  1. Set the Java bytecode version in build.gradle (Module: app): android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } } Ensure the JDK used by Gradle is at least JDK 17 for class file version 61.0. Check with java -version in terminal.
  2. If a dependency is compiled with Java 17 bytecode, update the Gradle JDK in Android Studio: File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK > select JDK 17 or higher. Then rebuild.
  3. Exclude the offending dependency and use a compatible version. For example, if a library requires bytecode 61.0, find an older version that targets 55.0: implementation('com.example:library:1.0.0') { exclude group: 'com.example' } Then add implementation 'com.example:library:0.9.0'.

Dead Ends

Common approaches that don't work:

  1. Set compileSdk to a higher value like 34 to force the build to accept newer bytecode 95% fail

    compileSdk controls API level, not bytecode version; it does not affect class file version compatibility.

  2. Add multiDexEnabled true to build.gradle 99% fail

    MultiDex handles method count limits, not bytecode version issues.

  3. Downgrade the Kotlin version to 1.6.0 to use older bytecode 80% fail

    This may break newer Kotlin features and does not fix the dependency that is already compiled with a higher version.