2014-09-10 3 views
0

Я до сих пор поднимался и опускал различные проблемы с защитой, и до сих пор им не повезло. После proguarding моего приложения, когда я пытаюсь запустить класс POJO через XStream, следующий сбой происходит:Проблемы с Proguard и XStream Аннотации

09-09 23:01:51.188: E/AndroidRuntime(18692): java.lang.annotation.IncompleteAnnotationException: The element value is not complete for the annotation com.thoughtworks.xstream.annotations.XStreamConverter 
09-09 23:01:51.188: E/AndroidRuntime(18692): at libcore.reflect.AnnotationFactory.invoke(AnnotationFactory.java:301) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at java.lang.reflect.Proxy.invoke(Proxy.java:379) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at $Proxy2.value(Unknown Source) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at com.thoughtworks.xstream.mapper.AnnotationMapper.cacheConverter(SourceFile:515) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at com.thoughtworks.xstream.mapper.AnnotationMapper.processLocalConverterAnnotation(SourceFile:472) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at com.thoughtworks.xstream.mapper.AnnotationMapper.processTypes(SourceFile:222) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at com.thoughtworks.xstream.mapper.AnnotationMapper.processAnnotations(SourceFile:164) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at com.thoughtworks.xstream.XStream.processAnnotations(SourceFile:1971) 
09-09 23:01:51.188: E/AndroidRuntime(18692): at com.thoughtworks.xstream.XStream.processAnnotations(SourceFile:1982) 

Посмотрев на различных другие SO сообщениях для этого, а также документации Proguard, я следующее мой ProGuard конфигурационный файл:

-keepattributes SourceFile, LineNumberTable, *Annotation*, Signature, EnclosingMethod, InnerClasses 
-dontwarn com.thoughtworks.** 

# For serializable classes 
-keepnames class * extends java.io.Serializable 

# For serializable classes 
-keepclassmembers class * extends java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    !static !transient <fields>; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

# Keep everything in the XStream Package 
-keep class com.thoughtworks.** { 
    *; 
} 
# Keep my XStreamExporter class 
-keep class com.mypackage_name.data.exporters.XStreamExporter { 
    *; 
} 

сериализации держит мой класс POJO нетронутыми, как подтверждено seeds.txt выходом. Я пробовал все, что мог придумать/найти по этой проблеме. Что я упустил?

ответ

1

Если вы используете Proguard, включенную в Android SDK, вы можете использовать более старую версию (4.5? Я думаю).

У Proguard до версии 4.9 может возникнуть проблема с удалением аннотаций.

Исправлено чрезмерно агрессивное сокращение аннотаций класса. - http://proguard.sourceforge.net/downloads.html, 6-я пуля в списке изменений для версии 4.9.

Пробуйте последнюю версию Proguard, заменив банку в SDK на последнюю версию 5.0 (http://sourceforge.net/projects/proguard/files/proguard/). Ящик для замены находится в android-sdk/tools/proguard/lib/proguard.jar.

Смежные вопросы