2011-01-20 283 views
0

我工作的android application.when我運行下面錯誤應用occred.please幫我......如何解決android驗證錯誤?

01-20 20:39:02.955: WARN/dalvikvm(5690): VFY: arbitrarily rejecting large method (regs=93 count=23019) 
01-20 20:39:02.955: WARN/dalvikvm(5690): VFY: rejected Lez/com/Action_module_screen;.da()V 
01-20 20:39:02.955: WARN/dalvikvm(5690): Verifier rejected class Lez/com/Action_module_screen; 
01-20 20:39:02.955: INFO/System.out(5690): verify Errorez.com.Action_module_screen 
+2

你需要去接受你以前的問題的答案;你有12,並沒有接受一個單一的答案。 – kcoppock 2011-01-20 15:23:41

回答

2

這是鏈接到similar question。你的問題是一個(93 * 23019)> 2^21(2^21 = 2097152)

我相信簡短的答案是:你的方法太大,你需要優化它,使其更小會合適。

0

它通常表明您的APK中包含的代碼,就是沒有相應的操作系統版本/級別或編譯問題。有時它有助於清理項目並重建所有內容。 也許你應該提供一個更長的堆棧跟蹤,如果清理沒有幫助:)

2

您的Errorez.com.Action_module_screen類(「任意拒絕大方法」)的方法太大。它看起來像有問題的方法是da()。嘗試減小該方法的大小。

4

一些谷歌搜索原因和方法可以解決:

http://www.mentby.com/Group/android-developers/vfy-arbitrarily-rejecting-large-method.html

這意味着值(數寄存器*的指令字的數目)較大 2^21 [2,097,152]。

你的錯誤表明,該方法可以有很多的參數和局部變量(regs=93)和大量的代碼(指令count=23019):

`93 registers * 23019 number of instruction words` = 2,140,767 
exceeding the "size" limit of 2,097,152 by 43,615 (2%) 

驗證者不認爲你的方法是合理:-)。

我是不是真的希望任何人來打這個 - 它的預期以 防止腹脹了一個應用程序的本地堆驗證。 方法採取大量的參數,或有大量的本地 變量?我已經也看到一些貧困行爲當一個方法有4 調用另一個方法的調用,花了15個論據的; 寄存器分配器嚇了一跳。

的調試信息的存在或不存在影響的各種各樣的 東西「DX」代碼優化器被允許做(例如一些不必要的 指令將被保留,以便調試器可以在單步執行時顯示合理的 )。 通常開銷很小,但 它可能是你靠近邊緣,這推動了你。

http://www.mentby.com/Group/android-developers/verifyerror-arbitrarily-rejecting-large-method.html

另外:

另外以某種方式減少的平行分支的寬度(例如, 通過將內switch語句在自己的方法),如果可以 減少「全局」局部變量的數量(方法局部變量 達到所有分支路徑)即可能會大幅幫助

是的,在的Dalvik編譯器試圖分配一個「寄存器」在每個方法 局部變量

我並不贊成這種辦法,但你也可以將一些方法參數和局部變量的成實例變量:

通過使他們的實例變量您刪除 的編譯器需要/希望「管理」它們(並且使得方法 相當小)。