android - Proguard 混淆使我的基于通信的应用程序的更新版本成为 'impossible' 以与旧版本的消息传递兼容

标签 android deserialization proguard kryo

我的应用程序的一部分通过互联网在两个设备之间传输序列化对象数据,并在另一端反序列化(通过使用 Kryo 库)。 Proguard 混淆了这些类的名称,但我现在意识到我应该不混淆序列化类,以便应用程序的 future 更新仍然具有一致的类名。然而,现在为时已晚。

future 的更新可以通过 Proguard 进行不同的混淆处理,或者不对序列化类进行混淆处理。无论哪种方式,这都意味着当我的应用程序的旧版本和新版本尝试相互通信时会发生崩溃,因为旧版本将发送一个对象,由于类名不匹配(必须提供给 Kryo 方法调用)。

这让我处于这样一种境地:我不确定如何才能为我的应用程序提供 future 的更新,而不会在推出新版本时让我的用户因这些潜在的崩溃而烦恼。唯一真正的行动方案是否涉及必须经历这样一个时期,直到每个人都了解彼此的最新情况?

对于处理这种棘手情况的最佳方法,我将不胜感激。

最佳答案

除了 CommonsWare 的注释,您还可以使用 Proguard 的 -applymapping filename受影响的类/字段/方法的选项。此处,filename 指的是之前 Proguard 运行时保存的映射文件的副本。对于您的情况,我建议从此文件中删除所有未受影响的内容,以便仅保留受影响类等的混淆名称。

关于android - Proguard 混淆使我的基于通信的应用程序的更新版本成为 'impossible' 以与旧版本的消息传递兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415474/

相关文章:

android - GSON : Parsing JSON key value with sometime Object & sometime Array

Android 构建和混淆库项目

android - 带下划线的 Kotlin 类

json - 当成员类型更改时如何反序列化 JSON

java - 在 GSON 反序列化期间识别无效字段值

android - 使用 Proguard 对逻辑操作进行 VerifyError

android - 什么时候在 postDelayed 中发布的 runnables 在 Android 上实际执行?

Android Studio 不会使用 Brew Cask Android-SDK 目录

android - 如何让 ConstraintLayout 中的 View 填充可用高度?

java - 为什么 'table'中的成员字段 'java.util.HashMap'是 transient 的?