在安卓開發導入項目過程中,出現錯誤再所難免。最近導入項目就遇到如下錯誤,具體如下圖所示。
出現如上錯誤,最初設想先看下項目能不能運行。經嘗試可以完美的在windows系統上運行(雖然會出現如上的錯誤警告)。項目雖然在報警告的情況下,能在windows系統上運行,但一般Android項目都是基于Windows和OS X系統開發。于是猜想項目能不能同樣在OS X系統上運行呢?結果發現不能,必須要把這些錯誤警告解決才行。
最初根據上圖提示認為可能是對應的第三方jar包的問題。于是,分別替換了對應的第三方jar包。替換后,發現還是出現相同的問題。由此jar包問題被排除。經查找相應的資料說添加如下代碼能解決這個錯誤警告,報著半信半疑的態度開始試試。
找到項目下對應的proguard-rules.pro
文件。如下圖所示。
在proguard-rules.pro文件中添加如下代碼(解釋:忽略內部類的一些屬性)。
-keepattributes EnclosingMethod
再次重新構建項目,運行發現然并卵。再次查找相關資料,資料顯示每個項目的Dex都有方法數的限制(上限65536,超過上限號稱應用爆棚),由此猜想會不會是Dex的方法數超過上限呢?同樣報著試試的態度,在項目的build.gradle文件中添加multiDexEnabled true代碼(解釋:設置多Dex
可用)。
其具體情況如下圖所示
再次重構項目,運行,出現如下結果
由此項目可以在Windows上無錯誤運行,再次將項目導入Mac上,完美運行。Ignoring InnerClasses attribute for an anonymous inner class
問題解決就介紹到此。
下面做下簡單的小結:
(1) 第一考慮是不是可以直接忽略第三方的屬性的錯誤警告,由此層層遞進發現問題。
(2) 出現Ignoring InnerClasses attribute for an anonymous inner class問題一般是第三方jar的問題引起的可能性很小,首先考慮是不是Dex越界問題。
(3) 將keepattributes EnclosingMethod去除,再次重構發現也不會出現Ignoring InnerClasses attribute for an anonymous inner class問題,由此進一步推斷主要是Dex越界問題引起Ignoring InnerClasses attribute for an anonymous inner class問題。如果導入項目遇到類似問題首先判斷是否是Dex越界引起。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答