2013-08-19 3 views
1

Я использую xstream-android.jar для нескольких задач в своем проекте Android. Но когда я его отпущу, то приходит, что proguard делает обычную оптимизацию и обфускацию. Поскольку я использую XStream и позволяю им анализировать XML в список POJO, чтобы легко работать с XML, я сталкиваюсь с проблемой, что XStream не будет работать должным образом с proguard.XStream And 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 класс com.thoughtworks.xstream * {;}

Я очень благодарен, если у кого-то есть предложения по его решению. Чтобы XStream работал с proguard.

Заранее спасибо

wikistar

+0

Proguard вероятно затемненный (читайте: переименовано) ваш POJOs и его поле, которые не означает XStream больше не в состоянии соответствовать теги XML против них. Вам нужно будет исключить все, что должно быть сопоставлено с xml, в POJO в вашем конфигурационном файле Proguard. Или иначе: убедитесь, что вы исключаете каждый класс, который имеет аннотации XStream. –

+0

Спасибо, МТ, ты спас мой день. – wikistar

ответ

0

Вы можете сначала попытаться проверить с декомпилировать файл и дважды АПК проверить, если класс HospitalCode действительно есть?

Тогда я думаю, что наиболее вероятный ответ заключается в том, что вы не включили весь JAR-файл в свою версию APK.

+0

HospitalCode - тип String. Apk работает без proguard. Я думаю, что в него входит JAD-файл. – wikistar

+0

Вы пытались декомпилировать вас APK и посмотреть, есть ли класс HospitalCode? Это означает, что этот класс «оптимизирован» proguard. – Robin

+0

В моем исходном коде отсутствует класс HospitalCode. «HospitalCode» - это просто строка, которая была отклонена в классе следующим образом:
'private String HospitalCode; \t private String HospitalName; ' – wikistar

1

Вот как я отношусь к XStream 1.4.7 и Proguard. Добавьте следующие 2 строк в файле proguard-project.txt:

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