Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android,使用proguard和序列化_Java_Android_Serialization_Proguard - Fatal编程技术网

Java Android,使用proguard和序列化

Java Android,使用proguard和序列化,java,android,serialization,proguard,Java,Android,Serialization,Proguard,我们注意到,在proguard-rules.pro中,我们忽略了 -keep class com.thecompany.theapp.datamodel.** { *; } 行,它保留了可序列化的数据对象。这导致应用程序在解析序列化用户对象时崩溃,我们通过删除未使用的setter/getter(没有删除字段)更改了序列化用户对象。根据我们的理解,这是可以的 在我们将-keep行添加到proguard-rules.pro并调试serializedUser字符串时,字段仍然是模糊的(a、b、c等

我们注意到,在proguard-rules.pro中,我们忽略了

-keep class com.thecompany.theapp.datamodel.** { *; } 
行,它保留了可序列化的数据对象。这导致应用程序在解析序列化用户对象时崩溃,我们通过删除未使用的setter/getter(没有删除字段)更改了序列化用户对象。根据我们的理解,这是可以的

在我们将-keep行添加到proguard-rules.pro并调试serializedUser字符串时,字段仍然是模糊的(a、b、c等),Gson解析器仍然能够解析序列化字符串(耶!)。但为什么?!Gson解析器不希望字段不被混淆吗

当我们从模糊数据转换为非模糊数据时,这是否意味着以后会出现问题?有人能提供一些关于proguard和Gson解析序列化对象之间的交互如何工作的清晰信息吗

这就是我们使用Gson解析数据对象的方式:

String serializedUser = EncPrefUtil.decryptStringPref(context, R.string.pref_key_user);
User user = !TextUtils.isEmpty(serializedUser) ? new Gson().fromJson(serializedUser, User.class) : new User();

Gson解析器希望字段不被混淆,但这不会使它崩溃。它将解析对象,并没有找到任何相应的字段,然后将字段初始化为其默认值

如果混淆字段名和原始字段名(针对不同类型的字段)之间存在匹配,则可能会崩溃。例如,如果您得到了名为“x”和“y”之类的变量,可能会发生这种情况,因为模糊处理可能会产生这个名称

因此,您不能简单地从模糊化对象切换到非模糊化对象,您可以实现自己的解析器,并有一个转换步骤,将旧的“坏”模糊化序列化转换为新的未模糊化对象,然后对其进行序列化

这可能会有帮助