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将json转为javabean的使用

如何使用 FlexJSON 序列化 Map<String, List<Object>>

JSON到SQL生成器(JQUERY)

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]