首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Proguard -不要混淆Kotlin数据类。

Proguard -不要混淆Kotlin数据类。
EN

Stack Overflow用户
提问于 2017-09-07 14:16:12
回答 4查看 21K关注 0票数 36

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

有办法这样做吗?

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

代码语言:javascript
运行
复制
-keepclassmembers data class example.data_layer.** { *; }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-11 13:17:57

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

代码语言:javascript
运行
复制
-keep class com.company.myfeature.model.** { *; }

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

代码语言:javascript
运行
复制
@Keep
data class MyRequestBody(val value: String)

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

希望在将来有一种使用一个ProGuard规则的方法来禁用包中所有数据类的混淆,而不需要为模型类设置一个子包。

票数 72
EN

Stack Overflow用户

发布于 2019-11-07 01:54:41

@Keep注释工作时,另一个选项是将@SerializedName添加到属性中:

代码语言:javascript
运行
复制
data class SomeDataClass(
    @SerializedName("prop1") val PropertyOne: String, 
    @SerializedName("prop2") val PropertyTwo: Boolean
)
票数 4
EN

Stack Overflow用户

发布于 2020-02-09 07:54:15

我不确定保持整个数据类是否好。但如果这是必要的,下面的保护规则将有效。但是,这只是一种解决办法。我建议不要有信心。请仔细考虑。

代码语言:javascript
运行
复制
-keepclasseswithmembers class example.data_layer.** {
    public ** component1();
    <fields>;
}

我在这里有一篇文章,其中有一个更详细的解释:如何使Pro卫兵保持Kotlin数据类

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46098682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档