2013-10-11 21 views
0

工作dexguarding我的應用程序中運行我的應用程序排除類不適合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更新。 –