You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中R8与Sealed Class兼容性报错排查

解决R8报错:Sealed classes are not supported as program classes when generating class files

问题原因

这个错误源于当前版本的R8(Android代码压缩工具)处理Kotlin密封类时的兼容性问题:当编译目标为Java 17且发布构建启用代码压缩时,R8无法正确识别以Java 17密封类格式生成的Kotlin密封类字节码。

解决方案

方案1:强制Kotlin生成旧版密封类字节码(无需升级AGP)

在模块的build.gradle中修改kotlinOptions,添加编译器参数让Kotlin不使用Java 17密封类语法,转而用传统方式实现密封类:

kotlinOptions {
    jvmTarget = "17"
    // 添加该参数规避R8的处理bug
    freeCompilerArgs += "-Xno-java-sealed-classes"
}

方案2:升级Android Gradle插件(AGP)版本

若项目允许升级,将AGP版本升至8.1.0及以上,同时对应升级Gradle版本(AGP 8.1.0适配Gradle 8.2)——新版本AGP已修复R8对Java 17密封类的处理问题。

修改项目根目录的build.gradle:

buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:8.1.0'
    }
}

同步修改gradle/wrapper/gradle-wrapper.properties中的Gradle版本:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip

方案3:调整R8的desugar配置

在项目根目录的gradle.properties中添加以下配置,启用R8对密封类的desugar支持:

android.r8.desugar.sealedClasses=true

该配置会让R8正确识别Java 17格式的密封类字节码。

验证

修改配置后,执行./gradlew assembleRelease(或在Android Studio中构建发布版本),确认报错消失。

内容的提问来源于stack exchange,提问作者Ghasem Shirdel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:23:21