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()
在我的项目中,我使用 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()