美文网首页
Android方法数统计

Android方法数统计

作者: 陆云帆 | 来源:发表于2017-08-22 21:45 被阅读243次

    背景

    在大项目合作中,我们会提供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.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等等),好处是有一个图形界面显示,如下:

    dexcount-gradle-plugin使用示意图
    参考链接:https://github.com/KeepSafe/dexcount-gradle-plugin/blob/master/README.md

    相关文章

      网友评论

          本文标题:Android方法数统计

          本文链接:https://www.haomeiwen.com/subject/yckrdxtx.html