2019独角兽企业重金招聘Python工程师标准>>>

【工具】统计jar包和apk中的java方法数 :http://www.baidufe.com/item/5891ec6f737268c7f675.html

这两天被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/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 ,这个时候可以到任何目录去使用该工具了,如:

# 直接在工具后面指定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 -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" ]; thenMETHOD_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" ]; thenecho ''
elseecho $1 dex2 method num: $METHOD_COUNT_TWO
fi
cd .. && rm -rf apktemp

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

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

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

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

转载于:https://my.oschina.net/u/199776/blog/364334

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

  1. Idea自带的工具打jar包和Maven打Jar包(SpringBoot工程)

    1.Idea自带的工具打jar包 (1)点击菜单栏的File后选中Project Structure,接着按如下图所示操作: (2)点击"OK"按钮后会出现下图的界面,然后继续点击 ...

  2. Intellij IDEA开发环境搭建,scala配置及打包,jar包在spark中的运行

    1. Intellij IDEA 开发环境搭建 最近在学习scala,除需要编写scala程序外,同时还需要创建maven工程,打成Jar包,而Eclipse在这方面显得使用的不是那么方面,同时由于I ...

  3. Jar包冲突详解(Java)

    Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除.依赖管理 ...

  4. 问题备忘: 将工程打包成jar包运行,就报java.io.FileNotFoundException: class path resource错误

    最近在在使用@Value注入文件碰到如下问题: 工程在在IntelliJ IDEA开发环境里正常运行,但是一旦将工程打包成jar包运行,就报java.io.FileNotFoundException: ...

  5. java开发常用jar包_Java开发中常用jar包整理及使用

    本文整理了我自己在Java开发中常用的jar包以及常用的API记录. 一.common-lang3 简介:一个现在最为常用的jar包,封装了许多常用的工具包 依赖: org.apache.common ...

  6. Java项目导出源代码jar包在Eclipse中查看中文注释乱码的问题

    问题现场: 由于项目比较多,全部添加到Maven主项目中的话虽然更新调试方便,但项目多了严重影响Eclipse的速度,所以将一部分项目单独导出包含源代码的jar包,上传到nexus上,供其它项目引用: ...

  7. 03_dbcp数据源依赖jar包,DBCP中API介绍,不同过dbcp方式使用dbcp数据库连接池,通过配置文件使用dbcp数据库连接池

     DBCP数据源 使用DBCP数据源,需要导入两个jar包 Commons-dbcp.jar:连接池的实现 Common-pool.jar:连接池实现的依赖库. 导入mysql的jar包. DBC ...

  8. 使用Maven命令安装jar包到repo中

    项目中可能会碰到很多jar包,使用maven update不能更新,或者jar包是拷贝过来,不能编译的情况.此时就需要手动使用命令行安装. 例如Demo项目中提示缺少四个jar包,但是在repo中已经 ...

  9. androidstudio引用本地maven_Maven多模块如何打包本地的jar包到war中

    现如今,使用spring-boot和maven开发项目已经越来越普遍了,同时大多时候我们也是通过maven以及公共的repo和私服repo来管理自己的jar包依赖,但难免会碰到有些jar包需要放在本地 ...

最新文章

  1. JSP proxool+mysql数据库连接池配置
  2. 【年终总结】2021年有三AI做了什么,2022年我们要做什么?
  3. oracle12g安装手册,oracle 12c 安装 手册
  4. 这个被称为20世纪最伟大人物的最强理科生,到底有多强,你根本不了解
  5. 今日头条人群洞察报告
  6. Attachments to close incidents
  7. 14岁女孩游戏充值6万被发现后自杀,腾讯回应:已完成退款处理
  8. TCP三次挥手四次握手
  9. 校园网络项目PT模拟
  10. 【南卡樱桃|读书笔记《学习高手》】
  11. Python 列表与元组
  12. HTML文本格式化标签详解
  13. 全球与中国自动识别系统单元市场深度研究分析报告
  14. UML2.51边译边学-接口
  15. 宾果消消乐和宾果消消消_《宾果消消消》攻略之关卡障碍介绍
  16. 交换机crc错误是什么意思_OSN1800设备LDX对接S9706交换机,交换机持续有CRC错误告警...
  17. js中怎样把ASCII码中的字符与十进制的数相互转换-学习笔记
  18. 关于树状图画法的分析
  19. 打印机相关的c语言程序,VC下打印机的使用
  20. MATLAB 郭彦甫 第十四课练习答案

热门文章

  1. 用CSS实现梯形图标
  2. java B2B2C Springcloud多租户电子商城系统-消息驱动的微服务(消费分区)
  3. 海康摄像头的二次开发(java)
  4. MongoDB 启动 Failed to connect to 127.0.0.1:27017, reason: 由于目标计算机积极拒绝,无法连接。...
  5. 重复调用的代码块——方法
  6. VMM系列之使用VMM服务器构建 Hyper-V 主机(3)
  7. 12月第1周.BIZ域名总量TOP10:仅中德澳3国持续上涨
  8. iOS定位服务与地图应用开发:高德地图开发
  9. ZendStudio中,缺少gbk gb2312编码的解决办法
  10. Android学习笔记43:XML文件解析(Pull方式)