如何跳过基础包上的retrofit2使用的proguard模型?

时间:2017-06-10 13:11:43

标签: android kotlin proguard retrofit2

我正在用Kotlin和Retrofit 2编写一个应用程序。当我使用proguard时,我遵循这里的规则:

https://github.com/krschultz/android-proguard-snippets/blob/master/libraries/proguard-square-retrofit2.pro

此外,我还需要按照https://stackoverflow.com/a/41136007/3286489

中的说明来预测我的模型

如果我的模型在包中,它可以正常工作,我有-keep class com.elyeproj.wikisearchcount.model.** { *; }

package com.elyeproj.wikisearchcount.model

object Model {
    data class Result(val query: Query)
    data class Query(val searchinfo: SearchInfo)
    data class SearchInfo(val totalhits: Int)
}

但是,如果我将我的模型保留在基础包中作为下面的代码,但我不想保留整个包,即-keep class com.elyeproj.wikisearchcount.** { *; },因为这会破坏proguard的目的

package com.elyeproj.wikisearchcount

object Model {
    data class Result(val query: Query)
    data class Query(val searchinfo: SearchInfo)
    data class SearchInfo(val totalhits: Int)
}

我怎样才能保留我的模型类?

我试过了-keep class com.elyeproj.wikisearchcount.Model.** { *; },但它没有用。

2 个答案:

答案 0 :(得分:8)

为什么不使用注释@SerializedName,然后您不必担心混淆? 您可以使用以下代码:

object Model {
    data class Result(@SerializedName("query") val query: Query)
    data class Query(@SerializedName("searchInfo") val searchinfo: SearchInfo)
    data class SearchInfo(@SerializedName("totalhits") val totalhits: Int)
}

答案 1 :(得分:3)

经过进一步探索,我找到了答案

-keep class com.elyeproj.wikisearchcount.Model** { *; }