0

在对我的应用程序进行 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

所以显然问题在于混淆步骤。

是的,如果我禁用混淆,它可以正常工作。

我显然做错了什么,因为即使我明确要求排除它,我仍然会不断收到错误。

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

4

2 回答 2

2

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

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

(我是 ProGuard 和 DexGuard 的创建者)

于 2013-10-11T22:14:23.523 回答
1

我将我的解决方案留在这里,以防它对其他人有任何帮助 - 我知道它不再对提出问题的人有用。

就我而言,这是一个添加解决问题DocumentBuilder的实例。org.apache.harmony.xml.parsers.DocumentBuilderImpl-keep class org.apache.** { *; }

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

于 2020-01-09T15:54:45.393 回答