Android 签名的 apk:Jackson ObjectMapper 为包含 List 的对象返回 null

Posted

技术标签:

【中文标题】Android 签名的 apk:Jackson ObjectMapper 为包含 List 的对象返回 null【英文标题】:Andiord signed apk : Jackson ObjectMapper returns null for an object containing List 【发布时间】:2017-07-22 03:09:45 【问题描述】:

My Rest API 以 Json 字符串格式返回以下对象的实例:

public class ObjectWithList implements Serializable 
    private long id;
    private String name;
    private List<String> contacts;

我的 android 应用尝试使用以下代码反序列化此结果:

ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonResponse, ObjectWithList.class);

在调试 apk 中,ObjectMapper 能够成功地将 JSON 字符串反序列化为该对象实例,并且列表数据完好无损。但是,在签名的 apk 中,返回的对象包含空列表。连名字都是空的。 ObjectMapper 没有例外。为什么这不起作用? 返回没有任何列表的任何其他对象的其他 API 将被反序列化而不会出现任何问题。为什么包含列表的对象不起作用?

我检查了许多 SO 帖子,但找不到任何解决此问题的输入。 非常感谢任何提示/指针。

问候, 肖巴纳

【问题讨论】:

【参考方案1】:

在调试 apk 中,ObjectMapper 能够成功地将 JSON 字符串反序列化为该对象实例,并且列表数据完好无损。但是,在签名的 apk 中,返回的对象包含空列表

我怀疑您正在使用 ProGuard,默认情况下它在调试版本中是禁用的。您也可以通过在您的build.gradle 中设置minifyEnabled false 来为您的签名禁用它,或者从ProGuard 中排除某些类。

【讨论】:

非常感谢马尔辛。抱歉延迟回复。是的,我正在使用 ProGuard,我更喜欢保持启用状态。所以我会尝试你的第二个建议,并确认从 ProGuard 中排除某些类是否可以解决这个问题。 我排除了需要从 ProGuard 反序列化的必要 gson 类和我的应用程序类,它运行良好!该列表包含由 Rest API 返回的数据。再次感谢马辛! 我想知道我的应用程序的其他对象是如何被反序列化而没有任何问题的?为什么只有包含列表的对象会出现这个问题?

以上是关于Android 签名的 apk:Jackson ObjectMapper 为包含 List 的对象返回 null的主要内容,如果未能解决你的问题,请参考以下文章

android如何生成签名apk文件

Android apk签名详解——AS签名获取签名信息系统签名命令行签名

Android开发对apk文件进行签名

Android:如何仅通过 Gradle 生成签名 APK? [复制]

android apk重新[签名]

Android Studio 之签名