使用 ProGuard 时是不是可以混淆 GSON 注释中的字符串?
Posted
技术标签:
【中文标题】使用 ProGuard 时是不是可以混淆 GSON 注释中的字符串?【英文标题】:Is it possible to obfuscate Strings in GSON Annotations while using ProGuard?使用 ProGuard 时是否可以混淆 GSON 注释中的字符串? 【发布时间】:2017-10-24 22:48:39 【问题描述】:我正在尝试使用 ProGuard 缩小、优化和混淆我的应用程序。除 GSON 注释外,一切正常。我的应用程序中有这样的东西:
@Expose
@SerializedName("testbla")
private String test;
当我使用 ProGuard 时,它会变成这样:
@com.google.a.a.a
@c(a="testbla")
private String a;
因此存在某种混淆,但“testbla”仍然可读。 我在文档中读到字符串常量不会被 ProGuard 混淆(例如https://www.guardsquare.com/en/proguard/faq#encrypt)。不过,如果有任何选择,我想混淆这些字符串。那么有没有可能,请告诉我!
感谢您的帮助!
【问题讨论】:
我想这没有意义。那么 Gson 怎么知道如何映射 JSON 属性和你的 POJO 字段呢? ProGuard 做得对。如果你真的想要混淆它们,你必须重新实现你自己的ReflectiveTypeAdapterFactory
。
我不确定 android,但在“普通”Java 中,您还可以创建自定义类加载器,以便对使用 ProGuard 处理的类应用一些解密。在 Java 中实现起来真的很容易,而且可能在 Android 中。
【参考方案1】:
ProGuard 不会混淆字符串。
Gson 注释确保您的映射类能够正常工作很重要。
如果您删除注释并使用 proguard,当您的应用需要将您的 JSON 转换为 POJO 时,将会发生错误。因为代码将尝试查找属性“a”而不是“test”(因为您的代码被混淆了)。 正因为如此,Gson注解就很重要了。
还有其他选项可以混淆您的代码,例如 DexGuard,但它不是免费的。
查看差异: Link
【讨论】:
以上是关于使用 ProGuard 时是不是可以混淆 GSON 注释中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
android中的proguard - 我应该混淆gson POJO
ProGuard 混淆、java、Google Gson 和泛型集合——如何留住成员?