Android方法数统计

背景

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

步骤

生成aar

1)使用命令assemble生成aar

./gradlew assemble

2)在${module}/build/outputs/aar目录下找到aar文件,如下:


Android方法数统计_第1张图片
AAR文件位置示意图

生成dex

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

unzip telescopebase-debug.aar -d telescopebase-debug.aar.dir
cd 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.dex

Processing classes.jar.dex
Read 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 reflecthelper
Overall method count: 1792

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

附录

除了上面提到的dex-method-count之外,还可以通过一个gradle插件来实现项目方法数统计(统计的是整包的,包含android库,support-v4,v7等等),好处是有一个图形界面显示,如下:

Android方法数统计_第2张图片
dexcount-gradle-plugin使用示意图

参考链接: https://github.com/KeepSafe/dexcount-gradle-plugin/blob/master/README.md

你可能感兴趣的:(Android方法数统计)