Android - 继承接口的改造在发布模式下无法正常工作

问题描述 投票:0回答:2

目前我面临这个奇怪的问题。

我已经创建了retrofit实例,并且有两个api接口。 ApiClientOld 接口实现了 ApiClient 接口并重写了基本方法。

我正在创建对两个接口进行改造的实例。但两个实例都引用了基本方法。

请检查下面的示例代码。

下面的示例在调试模式下工作正常,但在发布模式下无法工作。

我很好奇为什么代码会这样工作。 请有人帮我解决这个问题吗?预先感谢!

interface ApiClient {
    @GET("owner/details")
    suspend fun getDetails(): Response<Details>
}

interface ApiClientOld : ApiClient {
    @GET("user/details")
    override suspend fun getDetails(): Response<Details>
}


fun createApiClient(retrofit: Retrofit, useOld: Boolean): ApiClient {
    return if (useOld)
        retrofit.create(ApiClientOld::class.java)
    else
        retrofit.create(ApiClient::class.java)
}

suspend fun makeAPI(retrofit: Retrofit) {
    val apiClient = createApiClient(retrofit, useOld=true)
    val response = apiClient.getDetails()
    // This should call the overridden method in ApiClientOld (user/details path)
    // But It is calling the base ApiClient (owner/details path)
}

makeAPI函数应该从派生接口调用api(用户/详细信息)。但它正在调用基本接口方法(所有者/详细信息)。 -- 仅在发布模式下

发布配置:

{
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
android retrofit retrofit2 okhttp
2个回答
0
投票

请在发布配置中制作

minifyEnabled false
。再试一次


0
投票

因此,由于这个问题与混淆有关,那么另一个选择是通过使用@Keep注释来自定义要防止混淆的代码。

@Keep interface ApiClientOld : ApiClient { @GET("user/details") override suspend fun getDetails(): Response<Details> }
    
© www.soinside.com 2019 - 2024. All rights reserved.