在android中的领域模型上放置@keep注释可以吗?

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

我遇到了一个问题,我为发布而构建的应用程序抛出错误并显示以下错误日志。

java.lang.ClassCastException: com.squareup.moshi.LinkedHashTreeMap cannot be cast to com.myAppPath.domain.model.IconInfo at com.myAppPath.ui.util.BindingAdapterKt.bindImage(BindingAdapter.kt:17) and so on..

我找到了这篇文章并将其应用于领域层中的模型,它看起来工作正常。 但是,我想知道是否可以在域层中的模型上放置

@keep
注释,因为域层不应该有任何依赖项。
任何比是/否答案更多的解释将不胜感激。

我的数据模型看起来像这样。

@Keep
data class IconDTO(
    @Json(name = "url") val iconDtoUrl: String?,
    @Json(name = "width") val width: Int?,
    @Json(name = "height") val height: Int?,
    @Json(name = "format") val format: String?,
    @Json(name = "bytes") val bytes: Int?,
    @Json(name = "error") val error: String?,
    @Json(name = "sha1sum") val sha1sum: String?
)
android proguard clean-architecture
1个回答
0
投票

@Keep
注释是Android特定的 - 它来自
androidx.annotation
包,因此不适合域层,因为通过此导入,域层将无法在不同的(JVM)环境中重用。

您应该考虑域层也应该独立于构建过程这一事实,因此这是不将

@Keep
注释放置在域层内的另一个原因。

我的建议是简单地将类放在

proguard.rules
中,以便在缩小过程中保留类及其字段:

-keep public class your.package.name.IconDTO {*;}

如果这个指令不起作用,我还找到了文章,其中有一个更高级的指令:

-keepclasseswithmembers class your.package.name.IconDTO {
    public ** component1();
    <fields>;
}
© www.soinside.com 2019 - 2024. All rights reserved.