2013-08-19 43 views
1

我在我的Android項目中使用xstream-android.jar執行多個任務。但是當我釋放它時,它會提示proguard會進行通常的優化和混淆處理。由於我使用的是XStream,並且讓他們將XML解析爲POJO的列表,以便輕鬆地使用XML,我遇到了XStream無法與proguard一起正常工作的問題。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庫/ XStream的-的android.jar
-keep類com.thoughtworks.xstream * {;}

我非常感謝,如果有人有建議如何解決這個問題。讓XStream與proguard一起工作。

在此先感謝

wikistar

+0

Proguard的混淆可能(閱讀:重命名)你的POJO和它的領域,這意味着XStream的是不再能夠對他們匹配的XML標記。您需要在Proguard配置文件中排除需要從xml映射到POJO的任何內容。或者換言之:確保排除每個具有XStream註釋的類。 –

+0

謝謝MT,你救了我的一天。 – wikistar

回答

0

你能先嚐試檢查與反編譯你的apk文件,並仔細檢查,如果類HospitalCode是真的嗎?

然後我認爲最可能的答案是你沒有在你的發佈版本的APK中包含整個JAR文件。

+0

HospitalCode是字符串類型。apk運行良好,沒有proguard。我認爲,包含了最新的JAR文件。 – wikistar

+0

您是否嘗試反編譯APK APK並查看「HospitalCode」類是否存在?這是爲了確認這個類是否被proguard「優化」了。 – Robin

+0

在我的源代碼中,沒有HospitalCode類。 「HospitalCode」只是這樣一個類中定義的字符串:
'private String HospitalCode; \t private String HospitalName;' – wikistar

1

這就是我如何處理XStream 1.4.7和Proguard。添加以下兩行中proguard-project.txt文件:

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