排除NoSuchMethodError上的类对DexGuard不起作用

时间:2013-10-11 07:06:52

标签: android obfuscation proguard dexguard

在执行我的应用程序后,运行我的应用程序时出现此错误

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

显然,问题出在混淆步骤中。

是的,如果我禁用混淆,它的工作没有任何问题。

我显然做错了,因为即使在我明确要求排除它之后,我仍然会收到错误。

我是否正确排除了它?还有其他的东西看起来不对吗?

2 个答案:

答案 0 :(得分:2)

NoSuchMethodException是由反射失败引起的。保持该方法可以帮助。 NoSuchMethodError是由链接问题引起的。在这种情况下,代码需要Android运行时中的方法。它可能是由使用不兼容的库引起的。 ProGuard或DexGuard的控制台日志可能包含一些提示。

如果您在saikoa.com上将我的配置,构建日志和失败的apk邮寄给我,我会调查它。

(我是ProGuard和DexGuard的创建者)

答案 1 :(得分:1)

如果对其他人有帮助,我将在这里保留我的解决方案-我知道对提出这个问题的人不再有用。

在我的情况下,DocumentBuilderorg.apache.harmony.xml.parsers.DocumentBuilderImpl的实例,因此添加-keep class org.apache.** { *; }解决了这个问题。

当您在抽象类上遇到类似错误时,我的建议是记录该对象的实例,以便找出您必须keep使用的类。