報錯 Ignoring InnerClasses attribute for an anonymous inner class

  在安卓開發導入項目過程中,出現錯誤再所難免。最近導入項目就遇到如下錯誤,具體如下圖所示。


       出現如上錯誤,最初設想先看下項目能不能運行。經嘗試可以完美的在windows系統上運行(雖然會出現如上的錯誤警告)。項目雖然在報警告的情況下,能在windows系統上運行,但一般Android項目都是基於Windows和OS X系統開發。於是猜想項目能不能同樣在OS X系統上運行呢?結果發現不能,必須要把這些錯誤警告解決才行。

       最初根據上圖提示認爲可能是對應的第三方jar包的問題。於是,分別替換了對應的第三方jar包。替換後,發現還是出現相同的問題。由此jar包問題被排除。經查找相應的資料說添加如下代碼能解決這個錯誤警告,報着半信半疑的態度開始試試。

      找到項目下對應的proguard-rules.pro文件。如下圖所示。


       在proguard-rules.pro文件中添加如下代碼(解釋:忽略內部類的一些屬性)。

  1. -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越界引起。

發佈了41 篇原創文章 · 獲贊 37 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章