在我的项目中,我使用AutoValue作为旧模型类。我开始使用Kotlin,我想使用Data Classes而不是AutoValue。我想在数据层中禁用所有数据类的模糊处理,但要对包中的其他类进行模糊处理。
有办法做到这一点吗?
我希望在我的 Proguard 文件中有这样的内容:
-keepclassmembers data class example.data_layer.** { *; }
答案 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()