Proguard - 不要混淆Kotlin数据类

Mar*_*lev 18 android proguard kotlin data-class

在我的项目中,我将AutoValue用于我的旧模型类.我开始使用Kotlin,我想使用数据类而不是AutoValue.我想为我的数据层中的所有数据类禁用模糊处理,但要对包中的其他类进行模糊处理.

有没有办法做到这一点?

我期望在我的Proguard文件中有这样的东西:

-keepclassmembers data class example.data_layer.** { *; }
Run Code Online (Sandbox Code Playgroud)

Mar*_*lev 35

为了解决这个问题,我将模型类移到了模型包中,并为添加了新的ProGuard规则.

-keep class com.company.myfeature.model.** { *; }
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用支持库中的@Keep注释来禁用类的混淆:

@Keep
data class MyRequestBody(val value: String)
Run Code Online (Sandbox Code Playgroud)

使用@Keep可能会导致问题,因为很容易忘记为新类添加它.

希望将来有一种方法可以使用一条ProGuard规则来禁用包中所有Data类的模糊处理,而无需为模型类提供子包.

  • 我不想对所有“数据类”进行混淆 (2认同)
  • 如果您使用@Keep并具有嵌套的数据类,请不要忘记在每个数据类中添加@Keep。 (2认同)
  • 正如你所提到的,用包 [-keep class com.company.myfeature.model.** { *; ] 那只适用于 Java,不适用于 Kotlin。你能帮我吗,谢谢 (2认同)