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

升级Gradle到8.4.0后出现ControllerInterface$DefaultImpls类找不到错误

Gradle 8.4.0升级后ControllerInterface$DefaultImpls找不到的问题解决

错误原因

升级到AGP 8.4.0(对应Gradle 8.4.0)后,R8代码压缩器的优化规则更严格。Kotlin中接口的默认实现会自动生成$DefaultImpls后缀的辅助类,你虽然给实现类Controller加了@Keep注解,但该注解不会自动覆盖接口生成的$DefaultImpls类,导致R8将其判定为无用代码并移除,运行时调用相关逻辑就会抛出NoClassDefFoundError。

解决方案

1. 直接给接口添加@Keep注解

在ControllerInterface接口上标记@Keep,确保接口本身及其自动生成的辅助类都被保留:

@Keep
interface ControllerInterface {
    fun connect(callback: ControllerCallback?)
}

2. 在混淆规则中保留$DefaultImpls类

如果不想给接口加注解,可以在proguard-rules.pro中添加规则,明确保留该辅助类(替换成实际包名):

-keep class com.yourpackage.ControllerInterface$DefaultImpls { *; }

3. 验证并适配R8配置

如果开启了minifyEnabled true,可以先临时切换到Proguard验证是否是R8的问题(仅用于排查):

android {
    buildTypes {
        release {
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

排查完成后,建议换回R8并通过上述1或2的方式适配规则,不建议长期使用Proguard。

4. 检查Kotlin版本兼容性

AGP 8.4.0建议搭配Kotlin 1.9.0及以上版本,若你的Kotlin版本过低,可能存在编译生成类的兼容性问题,尝试升级Kotlin版本到对应兼容版本。

内容的提问来源于stack exchange,提问作者itzhak levy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:56:06