ProGuard混淆会影响本地JSON数据吗?是否需配置-keep?
关于ProGuard配置与Gson序列化的问题解答
先明确ProGuard的核心行为
ProGuard会把代码里的类名、字段名、方法名这类“符号名”替换成毫无意义的短名称(比如test1变成a,test类变成b),核心目的是缩小安装包体积,同时防止反编译后代码被轻易读懂。
回到你的场景:不需要配置-keep,混淆对你的代码无影响
你的实体类字段test1/test2/test3/test4序列化后能输出a/b/c/d的JSON键,说明你肯定是通过**@SerializedName注解**或者自定义命名策略,把实体字段和固定JSON键做了绑定。这种情况下:
- 即使ProGuard把
test1混淆成x,Gson依然会根据你指定的"a"来生成JSON键,反序列化时也能正确对应回实体字段,完全不受混淆影响。 - 你只需要本地存储JSON,既不需要实体类字段名保持原样,也不需要其他人看懂你的实体类结构,所以完全没必要加
-keep来保留这些字段名。
补充:极端情况的说明
要是你没做任何映射配置,Gson默认会用实体字段名作为JSON键,那ProGuard混淆字段名后,JSON键会变成a/b/c这类混淆后的名称。但你的输出已经是固定的a/b/c/d,说明你肯定做了映射配置,所以这种情况不用考虑。
内容的提问来源于stack exchange,提问作者user13776577
相关产品推荐
相关产品推荐

