使用暂停函数混淆内部类后的ClassCastException

问题描述

我正在构建一个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 option错误

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

解决方法

这可能是R8中的错误,我已经打开issue 167373399进行跟踪。

请在那里跟进有关当前使用的Android Studio / R8版本的信息?

也请看看this Medium post,其中有更多有关使用R8缩小Kotlin代码的详细信息。

,

讨论继续进行,并在问题跟踪器167373399

上结束了