【问题标题】:Proguard - do not obfuscate Kotlin data classesProguard - 不要混淆 Kotlin 数据类
【发布时间】:2018-02-16 07:54:46
【问题描述】:

在我的项目中,我将AutoValue 用于我的旧模型类。我开始使用 Kotlin,我想使用 Data Classes 而不是 AutoValue。我想在我的数据层中禁用所有数据类的混淆,但要继续混淆包中的其他类。

有没有办法做到这一点?

我希望在我的 Proguard 文件中有这样的内容:

-keepclassmembers data class example.data_layer.** { *; }

【问题讨论】:

    标签: android kotlin proguard data-class


    【解决方案1】:

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

    -keep class com.company.myfeature.model.** { *; }
    

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

    @Keep
    data class MyRequestBody(val value: String)
    

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

    希望将来有一种方法可以使用一个 ProGuard 规则 来禁用包中所有 Data classes 的混淆,而无需为模型类

    【讨论】:

    • 我不希望对所有data classes 进行混淆
    • 如果你使用@Keep并且有嵌套的数据类,别忘了给每个类加上@Keep
    • 正如您提到的,使用包保持 [-keep class com.company.myfeature.model.** { *; } ] 仅适用于 Java,不适用于 Kotlin。你能帮我吗,谢谢
    • 我不明白为什么它不起作用。 Proguard 对 Java 和 Kotlin 的工作方式相同。您需要 Proguard 帮助 - 搜索与您的问题相关的其他问题。
    【解决方案2】:

    虽然@Keep 注释有效,但另一种选择是将@SerializedName 添加到属性中:

    data class SomeDataClass(
        @SerializedName("prop1") val PropertyOne: String, 
        @SerializedName("prop2") val PropertyTwo: Boolean
    )
    

    【讨论】:

    • 您能否解释一下@SerializedName 的作用以及它如何解决问题?
    • 这行不通。 @Keep 可以工作,或者需要添加 proguard 规则来告诉 proguard 不要混淆数据类
    【解决方案3】:

    我不确定保持整个数据类是否好。但如果需要,下面的 proguard 规则将起作用。 但是,这只是解决方法。我建议没有信心。请慎重考虑。

    -keepclasseswithmembers class example.data_layer.** {
        public ** component1();
        <fields>;
    }
    

    我这里有一篇文章有​​更详细的解释:How to make Proguard keep Kotlin data class

    【讨论】:

    • 您的个人资料表明您与已链接的文章相关联。在 Stack Overflow 上链接到您所属的东西而不透露它是您的 被视为垃圾邮件。请参阅:What signifies "Good" self promotion?some tips and advice about self-promotion。我已编辑您的帖子以解决此问题,希望您以后可以考虑。
    • @SamuelLiew 哦.. 我不知道。以后我一定会听从你的教导。感谢您的教导
    【解决方案4】:

    我用@Keep annotaion 解决了我的问题 对于所有解析 api 响应数据的模型类

    @保持

    数据类 MyClass()

    【讨论】:

      猜你喜欢
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 2016-07-04
      相关资源
      最近更新 更多