Android Proguard和XStream注释的问题

Android Proguard和XStream注释的问题,android,obfuscation,proguard,xstream,Android,Obfuscation,Proguard,Xstream,到目前为止,我一直在这里上下讨论各种proguard问题,到目前为止,我没有运气。在升级我的应用程序后,当我尝试通过XStream运行POJO类时,会发生以下崩溃: 09-09 23:01:51.188: E/AndroidRuntime(18692): java.lang.annotation.IncompleteAnnotationException: The element value is not complete for the annotation com.thoughtworks.

到目前为止,我一直在这里上下讨论各种proguard问题,到目前为止,我没有运气。在升级我的应用程序后,当我尝试通过XStream运行POJO类时,会发生以下崩溃:

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 {
    *;
}
-keepattributes源文件、LineNumberTable、*注释*、签名、封闭方法、内部类
-dontwarn com.thoughtworks**
#对于可序列化类
-keepnames类*扩展了java.io.Serializable
#对于可序列化类
-keepclassmembers类*扩展了java.io.Serializable{
静态最终长SerialVersionId;
私有静态final java.io.ObjectStreamField[]serialPersistentFields;
!静态!瞬态;
私有void writeObject(java.io.ObjectOutputStream);
私有void readObject(java.io.ObjectInputStream);
java.lang.Object WriterReplace();
java.lang.Object readResolve();
}
#将所有内容都保存在XStream包中
-保持类com.thoughtworks.*{
*;
}
#保留我的XStreamExporter类
-保留类com.mypackage_name.data.exporters.XStreamExporter{
*;
}

序列化使我的POJO类保持原样,正如seeds.txt输出所确认的那样。关于这个问题,我已经想尽一切办法了。我错过了什么?

如果您使用的是Android SDK中包含的Proguard,那么您可能使用的是旧版本(我想是4.5)

版本4.9之前的Proguard可能在删除注释时遇到问题

修复了类注释过度收缩的问题。-,版本4.9更改列表中的第6个项目符号

使用最新版本5.0()替换SDK中的jar,尝试最新版本的Proguard。要替换的jar位于android sdk/tools/proguard/lib/proguard.jar中