Android 如何防止Proguard混淆破坏jdom.jar

Android 如何防止Proguard混淆破坏jdom.jar,android,proguard,Android,Proguard,我有一个项目,它使用jdom SAXBuilder在Android应用程序中从xml创建文档 如果我只是打包我的应用程序,一切正常,内容已加载,没有例外。如果使用proguard混淆代码,则会出现以下异常: 06-22 10:07:26.210: ERROR/b(21255): Error 06-22 10:07:26.210: ERROR/b(21255): org.jdom.JDOMException: Could not load default SAX parser: org.apach

我有一个项目,它使用jdom SAXBuilder在Android应用程序中从xml创建文档

如果我只是打包我的应用程序,一切正常,内容已加载,没有例外。如果使用proguard混淆代码,则会出现以下异常:

06-22 10:07:26.210: ERROR/b(21255): Error
06-22 10:07:26.210: ERROR/b(21255): org.jdom.JDOMException: Could not load default SAX parser: org.apache.xerces.parsers.SAXParser: SAX2 driver class org.apache.xerces.parsers.SAXParser not found: org.apache.xerces.parsers.SAXParser in loader dalvik.system.PathClassLoader[/data/app/...news.activities-2.apk]
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.createParser(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.build(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.build(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at ....Utils.b.run(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at java.lang.Thread.run(Thread.java:1096)
06-22 10:07:26.210: ERROR/b(21255): Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser in loader dalvik.system.PathClassLoader[....news.activities-2.apk]
06-22 10:07:26.210: ERROR/b(21255):     at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:192)
06-22 10:07:26.210: ERROR/b(21255):     at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory.java:183)
06-22 10:07:26.210: ERROR/b(21255):     ... 5 more
06-22 10:07:26.210: ERROR/b(21255): Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser in loader dalvik.system.PathClassLoader[/data/app/....news.activities-2.apk]
06-22 10:07:26.210: ERROR/b(21255):     at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:192)
06-22 10:07:26.210: ERROR/b(21255):     at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory.java:183)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.createParser(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.build(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.build(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at ....Utils.b.run(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at java.lang.Thread.run(Thread.java:1096)
06-22 10:07:26.210: ERROR/b(21255): Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser in loader dalvik.system.PathClassLoader[/data/app/....news.activities-2.apk]
06-22 10:07:26.210: ERROR/b(21255):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
06-22 10:07:26.210: ERROR/b(21255):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
06-22 10:07:26.210: ERROR/b(21255):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
06-22 10:07:26.210: ERROR/b(21255):     at org.xml.sax.helpers.NewInstance.newInstance(NewInstance.java:49)
06-22 10:07:26.210: ERROR/b(21255):     at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:190)
06-22 10:07:26.210: ERROR/b(21255):     at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory.java:183)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.createParser(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.build(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at org.jdom.input.SAXBuilder.build(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at ....Utils.b.run(Unknown Source)
06-22 10:07:26.210: ERROR/b(21255):     at java.lang.Thread.run(Thread.java:1096)
引发此异常的代码是:

SAXBuilder builder = new SAXBuilder();
xmlDocument = builder.build(inputStream);
我使用以下配置混淆proguard的项目:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-libraryjars ./libs/commons-compress-1.0-SNAPSHOT.jar
-libraryjars ./libs/hoptoad-android.jar
-libraryjars ./libs/httpmime-4.1.jar
-libraryjars ./libs/javabase64-1.3.1.jar
-libraryjars ./libs/jdom-1.1.1-android-fork.jar
-libraryjars ./libs/OmnitureAppMeasurement-Android.jar

-ignorewarnings

-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

-keep public class * extends ....news.activities.SuperActivity
-keep public class ....news.xmlparser.VotingParser

-keep public class ....** {
  public protected private *;
}
//my package name removed for the question only

-keep public class....** {
  public protected private *;
}
//my package name removed for the question only

-keep public class org.jdom.** {
  public protected private *;
}

-keep public class org.apache.** {
  public protected private *;
}

-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 *;
}
-优化过程5
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-不要翻转
-冗长的
-优化!代码/简化/算术,!字段/*,!类/合并/*
-libraryjars./libs/commons-compress-1.0-SNAPSHOT.jar
-libraryjars./libs/hoptoad-android.jar
-libraryjars./libs/httpmime-4.1.jar
-libraryjars./libs/javabase64-1.3.1.jar
-libraryjars./libs/jdom-1.1.1-android-fork.jar
-libraryjars./libs/OmnitureAppMeasurement-Android.jar
-忽视警告
-keep public class*扩展android.app.Activity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-keep public class*扩展了android.app.backup.BackupAgentHelper
-keep public class*扩展了android.preference.preference
-保持公共类com.android.vending.licensing.ILicensingService
-保持公共类*扩展…news.activities.SuperActivity
-保持公共类…news.xmlparser.VotingParser
-保持公共课堂……**{
受公共保护的私人*;
}
//删除我的程序包名称仅用于该问题
-保持公共课堂……**{
受公共保护的私人*;
}
//删除我的程序包名称仅用于该问题
-保持公共类org.jdom.**{
受公共保护的私人*;
}
-保持公共类org.apache.**{
受公共保护的私人*;
}
-KeepClassSwithMemberNames类*{
本地人;
}
-KeepClassSwithMemberNames类*{
public(android.content.Context、android.util.AttributeSet);
}
-KeepClassSwithMemberNames类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}

你知道如何更改我的proguard配置以允许混淆吗

尝试使用
-skipnonpubliclibraryclasses
而不是
-dontskipnonpubliclibraryclasses


阅读库JAR时跳过非公共类,以加快处理速度并减少ProGuard的内存使用。

尝试使用
-skipnonpubliclibraryclasses
而不是
-dontskipnonpubliclibraryclasses

阅读库JAR时跳过非公共类,以加快处理速度并减少ProGuard的内存使用。

Cfr>>运行时问题>ClassNotFoundException

ProGuard不知道它必须保留类,因为它只是通过内省创建的。因此,您必须在配置中指定它:

-keep class org.apache.xerces.parsers.SAXParser
Cfr>>运行时问题>ClassNotFoundException

ProGuard不知道它必须保留类,因为它只是通过内省创建的。因此,您必须在配置中指定它:

-keep class org.apache.xerces.parsers.SAXParser

此答案解决了我的问题,与原始问题类似。此答案解决了我的问题,与原始问题类似。无论如何,根据,
skipnonpubliclibraryclasses
成为不受支持的选项。无论如何,根据,
skipnonpubliclibraryclasses
成为不受支持的选项。