在执行我的应用程序后,运行我的应用程序时出现此错误
01-01 04:47:02.948: E/AndroidRuntime(8125): FATAL EXCEPTION: Thread-9
01-01 04:47:02.948: E/AndroidRuntime(8125): java.lang.NoSuchMethodError: javax.xml.parsers.DocumentBuilder.setEntityResolver
01-01 04:47:02.948: E/AndroidRuntime(8125): at o.郋.櫯(:134)
01-01 04:47:02.948: E/AndroidRuntime(8125): at o.郋.鷭(:82)
01-01 04:47:02.948: E/AndroidRuntime(8125): at android.SHAREDLIBS.network.ISOManager.LoadISOXMLMessageFactory(:637)
01-01 04:47:02.948: E/AndroidRuntime(8125): at o.Ț.run(:294)
好吧,没问题。简单地排除该类被混淆。但是我尝试在dexguard-project.txt文件中包含什么并不重要,我仍然会收到错误。
我尝试过的一些事情
-keep public class javax.xml.parsers.**
-keep public class javax.xml.parsers.DocumentBuilder
-keep public abstract class javax.xml.parsers.DocumentBuilder
-keep class javax.xml.parsers.DocumentBuilder.** { *; }
-keep public abstract class javax.xml.parsers.DocumentBuilder.** { *; }
-keep public class javax.xml.parsers.** { *; }
-keep public class javax.xml.parsers.DocumentBuilder.** {public private protected *;}
-keepclassmembers class javax.xml.parsers.DocumentBuilder {
public abstract void setEntityResolver (org.xml.sax.EntityResolver);
}
-keepclassmembers public abstract class javax.xml.parsers.DocumentBuilder {
public abstract void setEntityResolver (org.xml.sax.EntityResolver);
}
我正在使用以下标志运行它。
-dontshrink
-dontoptimize
显然,问题出在混淆步骤中。
是的,如果我禁用混淆,它的工作没有任何问题。
我显然做错了,因为即使在我明确要求排除它之后,我仍然会收到错误。
我是否正确排除了它?还有其他的东西看起来不对吗?
答案 0 :(得分:2)
NoSuchMethodException
是由反射失败引起的。保持该方法可以帮助。 NoSuchMethodError
是由链接问题引起的。在这种情况下,代码需要Android运行时中的方法。它可能是由使用不兼容的库引起的。 ProGuard或DexGuard的控制台日志可能包含一些提示。
如果您在saikoa.com上将我的配置,构建日志和失败的apk邮寄给我,我会调查它。
(我是ProGuard和DexGuard的创建者)
答案 1 :(得分:1)
如果对其他人有帮助,我将在这里保留我的解决方案-我知道对提出这个问题的人不再有用。
在我的情况下,DocumentBuilder
是org.apache.harmony.xml.parsers.DocumentBuilderImpl
的实例,因此添加-keep class org.apache.** { *; }
解决了这个问题。
当您在抽象类上遇到类似错误时,我的建议是记录该对象的实例,以便找出您必须keep
使用的类。