Kotlin 使用挂起函数混淆内部类后的ClassCastException
我正在建立一个kotlin AAR图书馆,在出版之前我需要对其进行模糊处理。我的结构如下: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
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版本?