【问题标题】:XStream And ProguardXStream 和 Proguard
【发布时间】:2013-08-19 03:55:46
【问题描述】:

我在我的 Android 项目中使用 xstream-android.jar 执行多个任务。但是当我发布它时,proguard 会进行通常的优化和混淆。由于我正在使用 XStream 并让他们将 XML 解析为 POJO 列表以轻松使用 XML,因此我遇到了 XStream 无法与 proguard 一起正常工作的问题。

08-19 03:39:25.440: W/System.err(1522): com.thoughtworks.xstream.converters.ConversionException: HospitalCode : Didn't find class "HospitalCode" on path: /data/app/com.mobilefh.medicalregister-1.apk 08-19 03:39:25.440: W/System.err(1522): ---- Debugging information ---- 08-19 03:39:25.440: W/System.err(1522): message : HospitalCode : Didn't find class "HospitalCode" on path: /data/app/com.mobilefh.medicalregister-1.apk 08-19 03:39:25.440: W/System.err(1522): cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException 08-19 03:39:25.440: W/System.err(1522): cause-message : HospitalCode : Didn't find class "HospitalCode" on path: /data/app/com.mobilefh.medicalregister-1.apk 08-19 03:39:25.440: W/System.err(1522): class : java.util.List 08-19 03:39:25.440: W/System.err(1522): required-type : com.mobilefh.medicalregister.b.b.f 08-19 03:39:25.440: W/System.err(1522): path : /list/Hospital/HospitalCode 08-19 03:39:25.440: W/System.err(1522): -------------------------------

我正在尝试使用 proguard 选项来禁止 xstream 像这样工作:

-libraryjars libs/xstream-android.jar
-keep class com.thoughtworks.xstream.*{;}

如果有人对如何解决这个问题提出建议,我将非常感激。让 XStream 与 proguard 一起工作。

提前致谢

维基之星

【问题讨论】:

  • Proguard 可能混淆(阅读:重命名)您的 POJO 及其字段,这意味着 XStream 不再能够将 XML 标记与它们匹配。您需要在 Proguard 配置文件中排除任何需要从 xml 映射到 POJO 的内容。或者换一种说法:确保排除所有具有 XStream 注释的类。
  • 感谢 MT,你拯救了我的一天。

标签: android xstream


【解决方案1】:

这就是我处理 XStream 1.4.7 和 Proguard 的方式。在proguard-project.txt 文件中添加以下两行:

-keep class com.thoughtworks.** { *; }
-dontwarn com.thoughtworks.**

【讨论】:

    【解决方案2】:

    您可以先尝试反编译您的 apk 文件并仔细检查类 HospitalCode 是否真的存在吗?

    那么我认为最可能的答案是您没有在您的 APK 发行版中包含整个 JAR 文件。

    【讨论】:

    • HospitalCode 是 String 类型。apk 在没有 proguard 的情况下运行良好。我认为包含整个 JAR 文件。
    • 您是否尝试反编译您的 APK 并查看“HospitalCode”类是否存在?这是为了确认这个类是否被proguard“优化”过。
    • 在我的源代码中,没有 HospitalCode 类。 “HospitalCode”只是一个在这样的类中定义的字符串:
      private String HospitalCode; private String HospitalName;
    • 但是在您提供的跟踪中,运行时抱怨:找不到类“HospitalCode”。那么,你能反编译你的 APK 找到关键字“HospitalCode”吗?
    • 我反编译了apk,找不到类“HospitalCode”。在我的源代码中,确实没有“医院代码”。我很困惑为什么运行时会抱怨。
    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 2014-08-13
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多