【工具】統計jar包和apk中的java方法數 :http://www.baidufe.com/item/5891ec6f737268c7f675.html html
這兩天被Unable to excute DX的問題纏身,工程太大,方法數量超過65536限制,開發正常build都是you有問題的!納悶兒爲何Google要搞這個64K方法數的限制?通常大點兒的工程,引入的jar包很多的話,都會超過這個限制。
java
今天弄了兩個小工具,分別用於統計jar包和apk中java方法的數量,工具名稱分別爲:jarmethod.sh 和 apkmethod.sh,兩個工具在Linux環境下跑,分享給你們:android
一、jarmethod.sh工具,用於統計jar包中的方法數,腳本內容以下,將其保存爲jarmethod.sh便可:shell
#! /bin/sh # 得到輸入的jar文件 JAR_FILE=$1; # 這裏直接使用dx命令,是由於我已經提早配置好了環境變量,dx目錄位於: # $ANDROID_HOME/sdk/build-tools/android-4.3.1/dx dx --dex --verbose --no-strict --output=temp.dex $JAR_FILE > /dev/null # 計算jar包中的方法數 METHOD_COUNT=`cat temp.dex | head -c92 | tail -c4 | hexdump -e '1/4 "%d\n"'` # 顯示結果 echo $METHOD_COUNT # 刪除臨時文件temp.dex rm -f temp.dex
爲了使用起來更方便,建議將其添加一個軟鏈到bin目錄,好比能夠這樣:工具
# 先更改下權限 chmod 0755 jarmethod.sh # 軟連到bin目錄,這樣能夠在任何目錄直接執行該工具 cd /usr/local/bin ln -s ~/Document/Tool/jarmethod.sh jarmethod
OK ,這個時候能夠到任何目錄去使用該工具了,如:ui
# 直接在工具後面指定jar包地址便可 jarmethod ~/tieba/libs/browser-sdk.jar
如上命令執行後,將會輸出方法數:4245spa
二、apkmethod.sh工具,用於統計apk包中的java方法數,腳本內容以下,將其保存爲apkmethod.sh便可:code
#! /bin/sh # 得到完整apk路徑 APK_PATH=$1 # 建立一個臨時目錄,來解壓這個apk文件 rm -rf apk_temp mkdir apk_temp cp $APK_PATH apk_temp/ cd apk_temp # 得到apk的名稱 APK_NAME="$(basename *.apk)" # 重命名爲zip mv $APK_NAME $APK_NAME.zip # 解壓apk,獲得classes.dex包 unzip -x $APK_NAME.zip > /dev/null # 計算dex中的method數量 METHOD_COUNT=`cat classes.dex | head -c92 | tail -c4 | hexdump -e '1/4 "%d\n"'` # 輸出method數量 echo $METHOD_COUNT # 刪除無用目錄 cd .. && rm -rf apk_temp
#! /bin/sh APK_FILE=$1 rm -rf apktemp mkdir apktemp cp $APK_FILE apktemp/ cd apktemp APK_NAME=${filename%.*} mv $1 $APK_NAME.zip unzip -x $APK_NAME.zip >/dev/null METHOD_COUNT=`cat classes.dex | head -c92 | tail -c4 | hexdump -e '1/4 "%d\n"'` seconddex=classes2.dex if [ -f "$seconddex" ]; then METHOD_COUNT_TWO=`cat classes2.dex | head -c92 | tail -c4 | hexdump -e '1/4 "%d\n"'` fi echo $1 dex method num: $METHOD_COUNT if [ ! -n "$METHOD_COUNT_TWO" ]; then echo '' else echo $1 dex2 method num: $METHOD_COUNT_TWO fi cd .. && rm -rf apktemp
使用方法同jarmethod,軟鏈方式略,使用方式以下:orm
# 直接在工具後面指定apk地址便可 apkmethod ~/tieba/tieba.apk
如上命令執行後,會輸出apk包中的方法數:58370htm
apk在打包的時候,是能夠進行混淆的(proguard),而這個混淆的工做,是在生成dex包後進行的!因此,這個65536的限制,是對混淆以前的dex包而言的,值得注意!