Proguard - 不要混淆Kotlin数据类

时间:2017-09-07 14:16:13

标签: android kotlin proguard data-class

在我的项目中,我使用AutoValue作为旧模型类。我开始使用Kotlin,我想使用Data Classes而不是AutoValue。我想在数据层中禁用所有数据类的模糊处理,但要对包中的其他类进行模糊处理。

有办法做到这一点吗?

我希望在我的 Proguard 文件中有这样的内容:

-keepclassmembers data class example.data_layer.** { *; }

4 个答案:

答案 0 :(得分:24)

要解决此问题,我将模型类移至模型包,并为包添加了新的ProGuard规则。

-keep class com.company.myfeature.model.** { *; }

另一种解决方案是使用支持库中的@Keep annotation来禁用该类的混淆:

@Keep
data class MyRequestBody(val value: String)

使用@Keep可能会导致问题,因为很容易忘记将其添加到新课程中。

希望将来有一种方法可以使用一个 ProGuard规则来禁用包中所有数据类的模糊处理,而无需为其提供子包。 模型类

答案 1 :(得分:2)

@Keep批注起作用的同时,另一种选择是将@SerializedName添加到属性:

data class SomeDataClass(
    @SerializedName("prop1") val PropertyOne: String, 
    @SerializedName("prop2") val PropertyTwo: Boolean
)

答案 2 :(得分:1)

我不确定保持整个数据类是否良好。但如果有必要,则以下保护规则将适用。 但是,这只是解决方法。我建议不要有信心。请仔细考虑。

-keepclasseswithmembers class example.data_layer.** {
    public ** component1();
    <fields>;
}

我在这里有一篇文章,其中有更详细的说明:How to make Proguard keep Kotlin data class

答案 3 :(得分:0)

我用@Keep annotaion 解决了我的问题 对于所有解析 api 响应数据的模型类

@Keep

数据类 MyClass()