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

问题描述

我正在使用 builtins.print 插件SafeArgs,但应用程序崩溃了。

Navigation Architecture Component

我在 Gradle 中使用 Caused by: java.lang.classNotFoundException: Didn't find class "com.package.domain.models.Model"

此外,我有三个模块 minifyEnabled trueappdata。因此,在我添加的所有三个 domain 文件

proguard-rules

我在导航图中将这三个类用作 -keepnames class com.package.domain.models.Model1 -keepnames class com.package.domain.types.ImageType -keepnames class com.package.domain.models.Model

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

解决方法

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

import androidx.annotation.Keep

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

您可以像这样保留整个模型包(实际上通常可以做到)

-keep class com.package.domain.models.** { *; }
,

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

@Keep 数据类 MyData(val id: long,val name: String)

,

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

proguard-rules

因为我不必继续用 -keepnames class * extends android.os.Parcelable -keepnames class * extends java.io.Serializable 注释我的模型,即 @KeepParcelable 或保持整个模型包远离混淆。

查看 this 了解更多信息。