Flexjson 和 Dexguard/Proguard
Posted
技术标签:
【中文标题】Flexjson 和 Dexguard/Proguard【英文标题】:Flexjson and Dexguard/Proguard 【发布时间】:2017-01-24 03:26:38 【问题描述】:当涉及到 flexjson 库时,我在使用 dexguard 时遇到了问题。尝试使用 JSONDeserializer 反序列化时,我不断收到以下错误。
**09-15 20:46:10.271 10901-11552/** **A/art: sart/runtime/class_linker.cc:3430] Check failed: klass->IsProxyClass()**
有没有人有适当的规则让flexjson在android发布apks混淆后正常工作?
类似于 gson lib 的东西。
【问题讨论】:
【参考方案1】:这可能是在三星设备上 - 一些设备型号和 Android 版本在某些 UTF-8 编码的 unicode 字符上存在问题。您应该尝试将 DexGuard 更新到最新版本。否则,您也可以尝试使用简单的混淆字典来解决它:
-classobfuscationdictionary empty.txt
其中 empty.txt 是一个空文件。
【讨论】:
即使添加了他们最新的 jar,它仍然失败。你的建议几乎解决了我的问题!谢谢!你能解释一下这个变通方法在做什么吗? 这个问题在以后的版本中修复了吗? 解决方法避免使用 unicode 字符的类名,一些三星设备无法正确处理。【参考方案2】:我们在一些三星设备(Android 5.1.1 上的 Galaxy J1 和 J5)上遇到了同样的问题。该应用程序只是无法启动。
在 Crashlytics 和 Google Play 中没有关于该问题的信息。最终,我们与 GuardSquare 取得了联系,后者告诉我们更新到新的 DexGuard 8.0.06。此版本包含一个新字典,可解决这些设备上的 ANR。
使用 Eric 提到的以下行也可以。虽然这只会使用 ASCII 字符作为他提到的一个大学。我刚刚问过使用它是否有任何缺点。因为它可能会避免未来的问题。
-classobfuscationdictionary empty.txt
【讨论】:
刚刚收到关于 ASCII 与 unicode 问题的回复:“使用 UTF-8 字符只是让黑客更难阅读和理解混淆代码的另一个额外困难:它更难识别和记住随机的 UTF-8 类名而不是 ASCII 类名。除此之外,从混淆的角度来看没有区别。”以上是关于Flexjson 和 Dexguard/Proguard的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 FlexJSON 序列化 Map<String, List<Object>>