2013-10-11 4 views
0

После dexguarding моего заявления я получил эту ошибку, когда не работают мое приложениеИсключая класс по NoSuchMethodError не работает 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

A NoSuchMethodException вызвано неточным отражением. Сохранение метода может помочь. A NoSuchMethodError вызван проблемой связывания. В этом случае код нуждается в методе в среде выполнения Android. Это может быть вызвано использованием несовместимых библиотек. Консольный журнал ProGuard или DexGuard может содержать некоторые подсказки.

Если вы напишите мне свою конфигурацию, свой журнал сборки и ваш неудачный apk, на saikoa.com, я рассмотрю его.

(Я создатель ProGuard и DexGuard)

+0

Привет Эрик, я, к сожалению, не сможет отправить вам APK, потому что я не имею на это разрешение. Я понимаю, что без него вы не сможете дать мне солидный ответ. В любом случае, можете ли вы сказать, правильно ли я исключаю класс в файле конфигурации? –

+0

-keep параметры не помогут, потому что обработанный код ищет метод в среде выполнения Android, на который не влияет обработка. Вы должны проверить вывод консоли в процессе сборки. Любые фрагменты информации, которые вы можете отправить мне, могут помочь. Мы также можем убедиться, что у вас есть последнее обновление DexGuard. –