Android方法数统计

来源:互联网 发布:html5手机网站源码 编辑:程序博客网 时间:2024/06/09 14:56

背景

在大项目合作中,我们会提供SDK给业务App使用,如果导致主Dex方法数超过65536,会导致打包不过,这个时候引入的方法数会成为一个衡量标准(考虑到应用稳定性等因素,MutiDex不会被优先考虑,比如手机淘宝)。

步骤

生成aar

1)使用命令assemble生成aar

./gradlew assemble

2)在${module}/build/outputs/aar目录下找到aar文件,如下:
AAR文件位置示意图

生成dex

1)先解压aar文件,定位到对应的classes.jar

unzip telescopebase-debug.aar -d telescopebase-debug.aar.dircd telescopebase-debug.aar.dir

2)使用dx命令,这个在android sdk的build-tools文件夹中,例如我的在/Users/yuanchang/Library/Android/sdk/build-tools/23.0.3/dx。命令如下:

dx --dex --verbose --no-strict --output=classes.jar.dex classes.jar

到这一步,得到目标dex文件classes.jar.dex

统计dex的方法数

1)下载dex-method-count来统计方法数,链接:
https://github.com/mihaip/dex-method-counts
2)使用dex-method-count来统计方法数

$ dex-method-counts --output-style=flat --max-depth=3 classes.jar.dexProcessing classes.jar.dexRead in 1792 method IDs.    15 android.app    15 android.content     4 android.content.res     1 android.database     3 android.graphics     1 android.opengl    82 android.os     2 android.text     5 android.util    57 android.view     5 android.widget    38 com.ali.telescope.api     6 com.ali.telescope.base.KV......    35 com.ali.telescope.internal.report     4 com.ali.telescope.spi    65 com.ali.telescope.util     2 com.ali.telescopesdk     4 dalvik.system    53 java.io   135 java.lang     2 java.lang.ref    23 java.lang.reflect    16 java.net     2 java.nio.charset     4 java.security     2 java.text    71 java.util     5 java.util.concurrent     6 java.util.zip    68 libcore.io    20 org.json     2 reflect.android.app     2 reflect.android.os    37 reflecthelperOverall method count: 1792

可以看到这个模块对应的方法数是1792个,–output-style=flat 表示使用扁平输出风格(对应的是树状) –max-depth=3 表示最大层次是3层包名深度

附录

除了上面提到的dex-method-count之外,还可以通过一个gradle插件来实现项目方法数统计(统计的是整包的,包含android库,support-v4,v7等等),好处是有一个图形界面显示,如下:
dexcount-gradle-plugin使用示意图
参考链接:https://github.com/KeepSafe/dexcount-gradle-plugin/blob/master/README.md

原创粉丝点击