统计jar包和apk中的java方法数

转载 2015年11月18日 12:45:56
转自:http://www.baidufe.com/item/5891ec6f737268c7f675.html

【工具】统计jar包和apk中的java方法数进入全屏
line

这两天被Unable to excute DX的问题缠身,工程太大,方法数量超过65536限制,开发正常build都是you有问题的!纳闷儿为什么Google要搞这个64K方法数的限制?一般大点儿的工程,引入的jar包不少的话,都会超过这个限制。

今天弄了两个小工具,分别用于统计jar包和apk中java方法的数量,工具名称分别为:jarmethod.sh 和 apkmethod.sh,两个工具在Linux环境下跑,分享给大家:

1、jarmethod.sh工具,用于统计jar包中的方法数,脚本内容如下,将其保存为jarmethod.sh即可:

#! /bin/sh
  
# 获得输入的jar文件
JAR_FILE=$1;
  
# 这里直接使用dx命令,是因为我已经提前配置好了环境变量,dx目录位于:
$ANDROID_HOME/build-tools/23.0.2/dx --dex --verbose --no-strict --output=temp.dex $JAR_FILE > /dev/null
  
# 计算jar包中的方法数
METHOD_COUNT=`cat temp.dex | head -c 92 | tail -c 4 | 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 ,这个时候可以到任何目录去使用该工具了,如:

# 直接在工具后面指定jar包地址即可
jarmethod ~/tieba/libs/browser-sdk.jar

如上命令执行后,将会输出方法数:4245


2、apkmethod.sh工具,用于统计apk包中的java方法数,脚本内容如下,将其保存为apkmethod.sh即可:

#! /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 -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"'`
  
# 输出method数量
echo $METHOD_COUNT
  
# 删除无用目录
cd .. && rm -rf apk_temp

使用方法同jarmethod,软链方式略,使用方式如下:

# 直接在工具后面指定apk地址即可
apkmethod ~/tieba/tieba.apk

如上命令执行后,会输出apk包中的方法数:58370


apk在打包的时候,是可以进行混淆的(proguard),而这个混淆的工作,是在生成dex包后进行的!所以,这个65536的限制,是对混淆之前的dex包而言的,值得注意!

【工具】统计jar包和apk中的java方法数

这两天被Unable to excute DX的问题缠身,工程太大,方法数量超过65536限制,开发正常build都是you有问题的!纳闷儿为什么Google要搞这个64K方法数的限制?一般大点儿的工...
  • liu1164316159
  • liu1164316159
  • 2014年11月21日 14:16
  • 4789

统计java代码行数和jar包中*.class代码的行数

统计java行数和jar包中代码行数
  • u010648555
  • u010648555
  • 2016年02月16日 15:38
  • 1346

Eclipse第三方jar过多,解决65535错误

ps:在项目中遇到了第三方jar加载过多导致项目运行时出现警示65535错误,在eclipse开发中常见错误。项目足够大的情况下。1、首先看看是否项目中的第三方jar能否有替代,如果可以先将重复的ja...
  • qq_33129625
  • qq_33129625
  • 2017年01月06日 00:14
  • 387

【工具】统计jar包和apk中的java方法数

这两天被Unable to excute DX的问题缠身,工程太大,方法数量超过65536限制,开发正常build都是you有问题的!纳闷儿为什么Google要搞这个64K方法数的限制?一般大点儿的工...
  • liu1164316159
  • liu1164316159
  • 2014年11月21日 14:16
  • 4789

统计java代码行数和jar包中*.class代码的行数

统计java行数和jar包中代码行数
  • u010648555
  • u010648555
  • 2016年02月16日 15:38
  • 1346

Java矩阵运算,jama包

Jama是一个基本的线性代数java包。包括一个基本的Matrix类和5个矩阵分解类。 Matrix类提供了基本的线性代数数值运算的功能,不同的构造函数可以构造双精度和浮点精度的二维数组,而不同的g...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年05月03日 10:40
  • 5438

统计Android apk和jar的方法数

今天遇到了统计Android apk和jar包种方法数的问题,然后搜索到了github上一个很普及的方法dex-method-counts,下载之后使用如下方法 1. 到下载后的目录, 执行...
  • weizaishouex2010
  • weizaishouex2010
  • 2015年11月02日 15:10
  • 3313

记录:dex-method-counts.jar统计Android apk中方法数目

记录:dex-method-counts.jar统计Android apk中方法数目1.为何要进行统计Android apk中方法数目? 1.当正常打包apk时,David虚拟机对方法数目限制在655...
  • yk377657321
  • yk377657321
  • 2016年09月19日 10:08
  • 880

使用dex-method-counts.jar统计APK中方法数目

生成APK,正常打包时,David虚拟机对方法数目限制在65535以下,当方法数目超过这个限制的时候,就会碰到方法数目超限的错误: 之所以出现上述问题,主要原因在于Android系统中,方法...
  • TnTlittlefish
  • TnTlittlefish
  • 2016年07月19日 13:14
  • 691

Java解析apk所需jar包

  • 2017年12月19日 11:09
  • 1.73MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:统计jar包和apk中的java方法数
举报原因:
原因补充:

(最多只允许输入30个字)