天天看點

記錄:dex-method-counts.jar統計Android apk中方法數目

記錄:dex-method-counts.jar統計Android apk中方法數目

1.為何要進行統計Android apk中方法數目?

  • 1.當正常打包apk時,David虛拟機對方法數目限制在65536以下,當方法數目超過這個限制的時候,會報如下異常
    UNEXPECTED TOP-LEVEL EXCEPTION:  
        java.lang.IllegalArgumentException: method ID not in [, ]:   
        at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:)  
        at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:)  
        at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:)  
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:)  
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:)  
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:)  
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:)  
        at com.android.dx.command.dexer.Main.run(Main.java:)  
        at com.android.dx.command.dexer.Main.main(Main.java:)  
        at com.android.dx.command.Main.main(Main.java:) 
               
  • 2.為何打包時會報異常?
    • 1.主要原因在于Android系統中,方法id存儲在Dex檔案中,而Dex檔案使用的是short類型資料,short類型為四個位元組,是以導緻了dex中方法不能超過65k.通常APK包含一個classes.dex檔案,是以Android應用的方法總數不能超過65536
  • 3.如何解決
    • 1.Google 在API 21中提供了通用的解決方案,使用android-support-multidex.jar來解決這一問題,簡單來說 就是采用一個dex分拆成多個dex檔案來解決;
    • 2.可采用插件化技術;
    • 3.分割Dex,多工程: 把所需要的.class檔案或者是Jar檔案和一些源碼一起編譯生成一個Jar檔案。然後使用Android SDK提供的dx工具把Jar檔案轉成Dex檔案
    至于如何解決,可參考url:
    http://blog.csdn.net/t12x3456/article/details/40837287
    http://blog.csdn.net/singwhatiwanna/article/details/39937639
               
  • 4.雖然65536異常已經得到了解決的方法,但在開發中同樣應該注意方法數過多的問題,這樣會使得應用龐大;可采用dex-method-counts.jar統計apk中方法的數目;具體步驟
    • 1.運作cmd,打開控制台界面,輸入 java -jar dex-method-counts.jar path*.apk; path*.apk就是你統計的某項目的方法。
    • 2.如果你的apk所在的路徑為C:\Users,統計工具所在的路徑也為C:\Users,則在指令行輸入
      java -jar C:\Users\dex-method-counts.jar C:\Users\app_v2.3.0.apk
                 
    • 3.敲Enter鍵,出現Processing XX\XX\XX.apk就成功了,等待結果
    • 4.如下截圖就是統計成功顯示的結果
      記錄:dex-method-counts.jar統計Android apk中方法數目
  • 5.dex-method-counts.jar下載下傳url:
    http://download.csdn.net/detail/zhengdan66/8914629#comment
               

繼續閱讀