【发布时间】:2020-08-26 10:05:35
【问题描述】:
我正在构建一个 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
为了解决这个问题,我需要为实现包添加一个混淆异常,这是我想要避免的。
现在真正奇怪的问题是,一旦我删除 suspend 修饰符,ClassCastException 就会消失。
我尝试添加-keeptkotlinmetadata,但出现R8: Unknown option 错误。
我已经被这个问题困扰了很长时间,没有一个不会强迫我为我的内部实现类添加异常的解决方案。
【问题讨论】:
标签: kotlin proguard classcastexception suspend android-r8