提问人:foseja 提问时间:10/30/2023 最后编辑:foseja 更新时间:10/30/2023 访问量:64
可以在 Android 中的域模型上放置@keep注释吗?
would it be okay to place @keep annotation on domain model in android?
问:
我遇到了一个问题,即我的应用程序为发布而构建,引发了错误,并显示以下错误日志。
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?
)
答:
1赞
sweak
10/30/2023
#1
注解是特定于 Android 的 - 它来自包,因此不适合域层,因为使用此导入,域层将无法在不同的 (JVM) 环境中重用。@Keep
androidx.annotation
您应该考虑这样一个事实,即域层也应该独立于构建过程,因此这是不将注释放在域层内的另一个原因。@Keep
我的建议是简单地将类放在 以便在缩小期间保留该类及其字段:proguard.rules
-keep public class your.package.name.IconDTO {*;}
如果这个指令不起作用,我还发现了这篇文章,其中有一个更高级的指令:
-keepclasseswithmembers class your.package.name.IconDTO {
public ** component1();
<fields>;
}
1赞
ΓDΛ
10/30/2023
#2
我收集了我的评论作为答案。 —-
批注可确保在生成时缩小代码时不会删除带批注的类或方法。此注释通常添加到通过反射访问的方法和类中,以防止编译器将代码视为未使用@Keep
在最佳实践中,通常也使用数据层。也许映射过程中可能存在缺陷
因为使用的类型是有的data models
datasource
这是我的想法。如果我的个人项目需要它,我会在那里使用它。
评论
@Keep
@Keep