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

启用R8时AndroidTV应用(Jetpack Compose+协程)ClassCastException崩溃

解决Jetpack Compose+Retrofit+Kotlin协程启用R8后的ClassCastException崩溃

核心修复方案:补充ProGuard/R8规则

你的崩溃是因为R8优化时篡改了协程挂起函数、业务类的类型签名,导致类型转换失败。修改proguard-rules.pro,添加以下规则:

# 保留Kotlin协程核心类型与签名,避免挂起函数类型被混淆
-keepattributes Signature,InnerClasses,EnclosingMethod
-keepclassmembers class kotlin.coroutines.** {
    *;
}
-keepnames class kotlinx.coroutines.** { *; }
-dontoptimize kotlinx.coroutines.**
-keep class kotlin.Result { *; }
-keepnames class kotlin.ResultKt { *; }

# 完善Retrofit与业务层规则,确保API接口、UseCase的类型信息不丢失
-keepattributes RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations
-keepattributes RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations
-keep,allowobfuscation,allowshrinking interface com.xx.xx.data.api.** { *; }  # 替换为你的API接口包路径
-keep,allowobfuscation,allowshrinking class com.xx.xx.domain.home.usecase.** { *; }  # 替换为你的UseCase所在包路径

# Jetpack Compose相关规则(Snapshot版本需手动补充)
-keep class androidx.compose.** { *; }
-keepnames class androidx.compose.** { *; }
-dontwarn androidx.compose.**

额外调整建议

  1. 检查协程版本兼容性:确保kotlinx-coroutines-android版本与Kotlin 1.8.22匹配(推荐用1.7.3版本),版本不兼容也可能触发奇怪的R8优化问题。
  2. 临时关闭优化验证:如果添加规则后仍崩溃,可先把proguard-android-optimize.txt换成proguard-android.txt(关闭激进优化),确认是否是优化步骤导致的问题,再针对性调整规则。
  3. 映射文件验证:利用Firebase Crashlytics的映射文件,将混淆后的崩溃栈还原成原始栈,定位到XxxXUseCase.kt:24行的具体逻辑,能更精准地补充规则。

原因说明

Debug模式或关闭混淆时,类型签名完整,协程能正确处理挂起函数的返回类型;启用R8后,默认规则不足以保留协程、业务类的泛型与签名信息,导致协程恢复时无法正确转换对象类型,抛出ClassCastException。

内容的提问来源于stack exchange,提问作者Kerim Bora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:33