使用 minifyEnabled 时缺少改造接口的注释

Missing annotations for retrofit interace when using minifyEnabled

提问人:RusArtM 提问时间:10/25/2023 更新时间:10/25/2023 访问量:33

问:

在没有(调试构建)的情况下运行构建时,一切正常,但是当使用构建时,调用 时会出现运行时错误。minifyEnabledminifyEnabledRepository.getData

该错误是关于缺少注释等。GETPUT

有两个 retrofit2 接口具有一个超级接口:

interface Api1 : Api {
    @GET("/api/v1/data")
    override suspend fun loadData(): List<Entry>
}

interface Api2 : Api {
    @GET("/api/v1/data2")
    override suspend fun loadData(): List<Entry>
}

interface Api {
    suspend fun loadData(): List<Entry>
}

有一个 dagger2 模块,可为以下接口提供改造:

    @Provides
    fun provideApi1(retrofit: Retrofit): Api1 = retrofit.create(Api1::class.java)

    @Provides
    fun provideApi2(retrofit: Retrofit): Api2 = retrofit.create(Api2::class.java)

有些在存储库中有这样的调用:

class RepositoryImpl @Inject constructor(
    val api1: Api1,
    val api2: Api2
) : Repository {

    fun getData(param: Boolean) = flow {
        val api = if (param) api1 else api2
        emit(api.loadData())
    }

}

我尝试为注释和接口添加 keepclasses 以保护规则。这无济于事。

安卓 Retrofit2 匕首-2 安卓-R8

评论

0赞 sgjesse 10/30/2023
请查看 issuetracker.google.com/248203227#comment3,看看这是否与您遇到的问题相同。Retrofit 为具有层次结构的服务添加了更好的规则,github.com/square/retrofit/pull/3782,因此还要检查您的改造版本。
0赞 RusArtM 10/31/2023
@sgjesse,感谢您的评论。它有一些共同点,但我不能说这是同一个问题,因为我在子接口中有注释,而不是在父接口中有注释。我试图用 proguard 规则保留所有这些接口,而不会影响结果。我已经通过重写代码解决了我的问题,但仍然有趣的是问题的原因是什么。当我有时间时,会运行一些测试并带着结果回到这里。

答: 暂无答案