Kotlin 使用挂起函数混淆内部类后的ClassCastException

Kotlin 使用挂起函数混淆内部类后的ClassCastException,kotlin,proguard,classcastexception,suspend,android-r8,Kotlin,Proguard,Classcastexception,Suspend,Android R8,我正在建立一个kotlin AAR图书馆,在出版之前我需要对其进行模糊处理。我的结构如下: package com.example.token interface TokenManager { suspend fun getTokenStatus(): String } 以上是api客户端可用的公共接口。将实现移动到内部包: package com.example.token.internal internal class RestApiTokenManager: Tok

我正在建立一个kotlin AAR图书馆,在出版之前我需要对其进行模糊处理。我的结构如下:

package com.example.token

interface TokenManager {
    suspend fun getTokenStatus(): String
} 
以上是api客户端可用的公共接口。将实现移动到内部包:

package com.example.token.internal
    
internal class RestApiTokenManager: TokenManager {
    override suspend fun getTokenStatus(): String {
    //....
    }
} 
我的混淆异常仅包括公共接口包:

-keep class com.example.token.*{*;}
不幸的是,这会导致类强制转换异常:

java.lang.ClassCastException: e.e.a.a.l.d.e$a cannot be cast to c.a.a.e.a.a$a
为了解决这个问题,我需要为实现包添加一个混淆异常,这是我想要避免的

现在真正奇怪的问题是,
ClassCastException
在我移除
suspend
修饰符后立即消失

我尝试添加
-keeptkotlinmetadata
,但得到
R8:Unknown选项
错误


我已经被这个问题困扰了很长一段时间,没有一个解决方案不会强迫我为我的内部实现类添加一个异常。

这可能是R8中的一个错误,我已经打开来跟踪这个问题

请继续关注您当前使用的Android Studio/R8版本的信息


还请看一看,其中有关于使用R8收缩Kotlin代码的更多详细信息。

讨论继续进行,并在issuetracker上结束了。

谢谢,我实际上明天就要创建票据了。你知道如何打印r8版本吗?我只是简单地拥有
classpath“com.android.tools.build:gradle:4.0.1
,我猜它定义了使用的R8版本?