将 SafeArgs 与 Proguard 和导航架构组件一起使用时出现 ClassNotFoundException?

ClassNotFoundException when using SafeArgs with Proguard and Navigation Architecture Component?

我正在使用 SafeArgs 插件和 Navigation Architecture Component 但应用程序崩溃了。

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.package.domain.models.Model"

我在 Gradle 中使用 minifyEnabled true

此外,我有三个模块 appdatadomain。因此,在我添加的所有三个 proguard-rules 文件中

-keepnames class com.package.domain.models.Model1
-keepnames class com.package.domain.types.ImageType
-keepnames class com.package.domain.models.Model

我在我的导航图中使用这三个 类 作为 argType

但是应用程序仍然崩溃。任何帮助将不胜感激。

尝试将 @Keep 注释放在 class 的顶部。喜欢

import androidx.annotation.Keep

@Keep
data class RepoData(val id: Long, val name: String)

你可以像

一样保留整个模型包(实际这样做通常没问题)
-keep class com.package.domain.models.** { *; }

只要您希望 class 保留在内存中,请始终使用 @keep 注释。

@保留 数据 class MyData(val id: long,val name: String)

我认为更合适的做法是将其添加到我的 proguard-rules 文件中。

-keepnames class * extends android.os.Parcelable
-keepnames class * extends java.io.Serializable

因为我不必一直用 @Keep 注释我的模型,它们是 ParcelableSerializable 或使整个模型包远离混淆。

查看 了解更多信息。