2017-05-24 104 views
2

我想用ProGuard缩小,优化和混淆我的应用程序。一切工作正常,除了GSON注释。我有这样的事情在我的应用程序:使用ProGuard时,是否可以在GSON注释中混淆字符串?

@Expose 
@SerializedName("testbla") 
private String test; 

当使用ProGuard它变成像这样的IM:

@com.google.a.a.a 
@c(a="testbla") 
private String a; 

因此有某种困惑,但“testbla”仍是可读。 我在文档中读到了字符串常量不会被ProGuard混淆(例如https://www.guardsquare.com/en/proguard/faq#encrypt)。不过,如果有任何选择,我想混淆这些字符串。那么有什么可能,请让我知道!

感谢您的帮助!

+0

我想这没有任何意义。 Gson如何知道如何映射JSON属性和POJO字段呢? ProGuard做得很对。如果你真的想混淆它们,你必须重新实现你自己的'ReflectiveTypeAdapterFactory'。 –

+0

我对Android没有把握,但在“普通香草”Java中,您还可以创建自定义类加载器,以便对ProGuard处理的类应用一些解密。在Java中实现它很容易,可能也是Android。 –

回答

2

ProGuard不会混淆字符串。

Gson注释确保您的映射类可以正常工作很重要。

如果您删除了注释并使用了proguard,那么当您的应用程序需要将您的JSON转换为POJO时,就会发生错误。因为代码将尝试查找属性“a”而不是“测试”(因为您的代码被混淆)。因此,Gson注释很重要。

还有其他选项可以混淆您的代码,如DexGuard,但它不是免费的。

退房的差异: Link