201602051456[Android] 關於 method 數量 65535

Android Apk 中除了 resources file 之外,最重要的便是包含程式邏輯的 dex file。傳統 Android Apk build tool 會將所有程式使用到的 Jar files merge 成單一個 dex file 再打包成 Apk。導致原有的「單一 Jar 檔所含的 method 數量不能超過 65535」的限制變成了「單一 Apk 所含的 method 數量不能超過 65535」。

在 build tool 改用 Gradle build 之前,Android app 開發者若遇到這類的問題,只能將部分的 Jar library 改用 resource 的形式放入 Apk 中,然後程式執行期間自行利用 class loader 載入 library[1]。這個難題在 Android 改用 Gradle build 之後得到改善,在 Gradle script 中開啟 multidex 功能後[2],打包出來的 Apk 解開可以發現 dex 檔案變成很多個而不是單一個。

如果好奇每個 Jar files 有多少 method 數量[3],可以利用下面指令查看

dx --dex --output=temp.dex orig.jar
cat temp.dex | head -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"'

Reference

[1] Custom Class Loading in Dalvik
http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html

[2] Building Apps with Over 65K Methods
http://developer.android.com/intl/zh-tw/tools/building/multidex.html

[3] Is there a way to get count of number methods used in a jar file
http://stackoverflow.com/questions/14023397/is-there-a-way-to-get-count-of-number-methods-used-in-a-jar-file

by autosun

回應
    沒有新回應!
關鍵字
共用引入檔