Proguard - 不要混淆 Kotlin 数据 类

Proguard - do not obfuscate Kotlin data classes

在我的项目中,我使用 AutoValue for my old model classes. I started using Kotlin and I want to use Data Classes 而不是 AutoValue。我想在我的 数据层 中禁用所有 Data 类 的混淆,但要继续混淆其他 类包裹。

有办法吗?

我希望在我的 Proguard 文件中有这样的东西:

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

为了解决这个问题,我将模型 classes 移到了 模型包 并为包添加了新的 ProGuard 规则。

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

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

的混淆
@Keep
data class MyRequestBody(val value: String)

使用 @Keep 可能会出现问题,因为很容易忘记为新的 class 添加它。

希望将来会有一种方法,使用一个 ProGuard 规则 来禁用对所有 Data classes 的混淆在包中,不需要 model classes.

的子包

虽然 @Keep 注释有效,但另一种选择是将 @SerializedName 添加到属性中:

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

我不确定保留全部数据 class 是否好。但如果需要,下面的 proguard 规则将起作用。 但是,这只是解决方法。我建议没有信心。请慎重考虑

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

我这里有一篇文章有​​更详细的解释:How to make Proguard keep Kotlin data class

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

@保持

数据classMyClass()