Android 如何防止Proguard混淆破坏jdom.jar
我有一个项目,它使用jdom SAXBuilder在Android应用程序中从xml创建文档 如果我只是打包我的应用程序,一切正常,内容已加载,没有例外。如果使用proguard混淆代码,则会出现以下异常: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
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
成为不受支持的选项。