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

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

我正在用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.** { *; },但它不起作用。

android kotlin proguard retrofit2
2个回答
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)
}

3
投票

在进一步探索之后,我找到了答案

-keep class com.elyeproj.wikisearchcount.Model** { *; }
© www.soinside.com 2019 - 2024. All rights reserved.