在 Android Studio 中升级版本后,应用崩溃

App crashes after versions upgrade in Android Studio

提问人:foseja 提问时间:10/31/2023 最后编辑:foseja 更新时间:10/31/2023 访问量:52

问:

升级 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

安卓 android-gradle-plugin proguard

评论

0赞 ΓDΛ 10/31/2023
在昨天发布的问题中。许多人已经得到答复。stackoverflow.com/questions/77386524/......

答: 暂无答案