Android的simplexml.jar proguard相关问题 [英] Android simplexml.jar proguard problem

查看:199
本文介绍了Android的simplexml.jar proguard相关问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是试图通过简单的XML-2.6.jar.I分析一个简单的XML机制的文档把这个罐子放到一个文件夹名为lib然后将其添加在图书馆。后来我试图跳过这个罐子所以在code proguard.cfg就像如下:

  -optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dont preverify
-verbose
-optimizations!code /简化/算术!现场/ * ,!类/合并/ *
-libraryjars LIB /简单的XML-2.6.jar
-dontwarn javax.xml.stream.events。**
-dontwarn javax.xml.stream中。**
-keeppackagenames com.wang.demo
-keep公共类org.simpleframework ** {*。 }
-keep公共类org.simpleframework.xml.core ** {*。 }
-keep公共类org.simpleframework * {*。 }
-keep公共类org.simpleframework.xml.core * {*。 }
-keep公共类org.simpleframework。*
-keep公共类org.simpleframework.xml.core。*
-keep公共类org.simpleframework ** {公众保护*。 }
-keep公共类org.simpleframework.xml.core ** {公众保护*。 }
-keep公共类javax.xml ** {*。 }
-keepattributes *注释*
-dontskipnonpubliclibraryclasses
-keep公共类*扩展com.wang.demo.CommonResponse {*; }
-keep公共类*扩展android.app.Activity
-keep公共类*扩展android.app.Application
-keep公共类*扩展android.app.Service
-keep公共类*扩展android.content.BroadcastReceiver
-keep公共类*扩展android.content.ContentProvider
-keep公共类*扩展android.app.backup.BackupAgentHelper
-keep公共类*扩展Android系统。preference。preference
-keep公共类com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames类* {
    天然的所述;方法&gt ;;
}
-keepclasseswithmembernames类* {
    公众和LT; INIT>(android.content.Context,android.util.AttributeSet);
}
-keepclasseswithmembernames类* {
    公众和LT; INIT>(android.content.Context,android.util.AttributeSet,INT);
}
-keepclassmembers枚举* {
    公共静态** []值();
    公共静态**的valueOf(java.lang.String中);
}
-keep类*实现android.os.Parcelable {
  公共静态最终android.os.Parcelable $造物主*;
}

我要涵盖所有的例外,但它logcat中显示:

  08-25 17:06:56.886:WARN / System.err的(8745):java.lang.NoSuchMethodException:M(DM,元素)
08-25 17:06:56.886:WARN / System.err的(8745):在java.lang.Class.getMatchingConstructor(Class.java:643)
08-25 17:06:56.886:WARN / System.err的(8745):在java.lang.Class.getConstructor(Class.java:472)
08-25 17:06:56.886:WARN / System.err的(8745):在org.simpleframework.xml.core.at.a(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.be.a(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.q.b(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.q.a(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.b.a(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.b<&初始化GT;(来源不明)。
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.av.a(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.dn.b(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.ar.h(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.ar.g(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.ed.a(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.az.a(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.Persister.read(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.Persister.read(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.Persister.read(来源不明)
08-25 17:06:56.897:WARN / System.err的(8745):在org.simpleframework.xml.core.Persister.read(来源不明)
08-25 17:06:56.907:WARN / System.err的(8745):在org.simpleframework.xml.core.Persister.read(来源不明)
因此,任何人帮我解决这个问题?


解决方案

我有同样的问题。

我认为这是因为的ProGuard 修改注释属性的名称。
例如,注释属性被定义为:

 公共@interface属性
{
    公共字符串名称()默认;
    公共字符串空()默认;
}

但是模糊处理后,就变成:

 公共@interface属性
{
    公共抽象的字符串一();
    公共抽象的布尔B();
}

然后,在运行时,code将无法获得通过反射属性名称。

I just try to parse a simple xml documention by simple-xml-2.6.jar.I put this jar into a folder named lib then add it in libraries .Then i attempt to skip this jar so code in the proguard.cfg just like below:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-libraryjars lib/simple-xml-2.6.jar
-dontwarn javax.xml.stream.events.**
-dontwarn javax.xml.stream.**
-keeppackagenames  com.wang.demo
-keep public class org.simpleframework.** { *; }
-keep public class org.simpleframework.xml.core.** { *; }
-keep public class org.simpleframework.* { *; }
-keep public class org.simpleframework.xml.core.* { *; }
-keep public class org.simpleframework.* 
-keep public class org.simpleframework.xml.core.* 
-keep public class org.simpleframework.** { public protected *; }
-keep public class org.simpleframework.xml.core.** { public protected *; }
-keep public class javax.xml.** { *; }
-keepattributes *Annotation*
-dontskipnonpubliclibraryclasses
-keep public class * extends com.wang.demo.CommonResponse { *; }
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

I want to cover all the Exceptions but the logcat it shows:

08-25 17:06:56.886: WARN/System.err(8745): java.lang.NoSuchMethodException: m(dm,Element)
08-25 17:06:56.886: WARN/System.err(8745):     at java.lang.Class.getMatchingConstructor(Class.java:643)
08-25 17:06:56.886: WARN/System.err(8745):     at java.lang.Class.getConstructor(Class.java:472)
08-25 17:06:56.886: WARN/System.err(8745):     at org.simpleframework.xml.core.at.a(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.be.a(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.q.b(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.q.a(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.b.a(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.b.<init>(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.av.a(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.dn.b(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.ar.h(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.ar.g(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.ed.a(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.az.a(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.Persister.read(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.Persister.read(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.Persister.read(Unknown Source)
08-25 17:06:56.897: WARN/System.err(8745):     at org.simpleframework.xml.core.Persister.read(Unknown Source)
08-25 17:06:56.907: WARN/System.err(8745):     at org.simpleframework.xml.core.Persister.read(Unknown Source)


So anyone help me fix it?

解决方案

I have the same problem.

I thinks it is because proguard changed the name of Annotation attribute. For example, annotation Attribute was defined as:

public @interface Attribute
{
    public String name() default "";
    public String empty() default "";
}

But after obfuscating, it becomes:

public @interface Attribute
{
    public abstract String a();
    public abstract boolean b();
}

Then, at runtime, the code will fail to get attribute name via reflection.

这篇关于Android的simplexml.jar proguard相关问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆