提问人:foseja 提问时间:10/31/2023 最后编辑:foseja 更新时间:10/31/2023 访问量:52
在 Android Studio 中升级版本后,应用崩溃
App crashes after versions upgrade in Android Studio
问:
升级 Gradle、Android Gradle 插件、JDK 版本、compileOptions 版本后应用崩溃。
变化是,
Gradle: 7.5 -> 8.1
AGP: 7.4.1 -> 8.1.2
JDK: 13 -> jbr17
compileOptions: 1.8 -> 17
compileOptions 我指的是
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
在上面的更改之后,我看到应用程序在发布版本中崩溃,并出现以下错误日志。
java.lang.ClassCastException:com.squareup.moshi.LinkedHashTreeMap 无法强制转换为 com.myAppPath.domain.model.IconInfo,网址为 com.myAppPath.ui.util.BindingAdapterKt.bindImage(BindingAdapter.kt:17) 等等。
我找到了一种方法并将其应用于域层中的相应模型,它似乎工作正常。
但是,我怀疑是否可以在域层的模型上放置注释,因为 1。域层不应具有任何依赖关系。2.我已经在数据层中对模型进行了注释,因此对我来说似乎是多余的。@keep
@keep
这是我在数据层中的模型,甚至在修复之前就已经存在了。@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?
)
这是我认为发生实例转换的错误日志最可疑的地方。
@Singleton
class MoshiAdapterConverter @Inject constructor(val moshi: Moshi) {
inline fun <reified T> convertJsonToObject(json: String?): T? {
return if (!json.isNullOrEmpty())
moshi.adapter(T::class.java).fromJson(json)
else
null
}
inline fun <reified T> convertObjectToJson(objectData: T?): String =
moshi.adapter(T::class.java).toJson(objectData)
}
所以我的问题是,1.是否可以在每个数据层和域层中放置@keep
注释两个模型?
2. 除了将模型放在领域层以遵循干净的架构原则之外,还有其他解决方案吗?@keep
答: 暂无答案
评论