Android在开发过程中,随着引用的库以及业务的增多,不可避免的会出现64K limit问题,也就是方法数过多的问题,Java代码中的Method总数和Field总数都不能超过65535个,那统计一下每一个jar包中包含多少个Method还是很有必要的,目前Google已经为我们实现了这样的工具:
dexdump命令
#查看apk的method总数
dexdump -f app.apk | grep method_ids_size
#查看apk的field总数
dexdump -f app.apk | grep field_ids_size
但是这只是apk文件,如果是jar包呢,会出现以下的结果:
Zip has no classes.dex
上面的命令不能满足需求,那我们可以用下面的命令来实现:
dx --dex --verbose --no-strict --output=/home/Desktop/temp.dex ~/Desktop/xxx.jar > ~/Desktop/temp.log
# /home/Desktop/temp.dex 生成的dex文件存放的路径
# ~/Desktop/xxx.jar 目标jar文件
# ~/Desktop/temp.log 处理过程生成的log,如果没有指定的话,那将会输出在终端中
生成temp.dex文件后,执行以下命令:
cat temp.dex | head -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"'
我对netty-3.9.5.Final.jar
计算后,输出了8302
在Android上用上Netty这个库,可真是重量级啊!