Android 统计代码方法数

三味码屋 2023年09月04日 209次浏览

统计 DEX 文件(.dex 格式的文件)中的方法数。

编译自己的工程

对自己的工程进行编译、打包,生成 APK 文件或者 aar 文件

获取 DEX 文件

解压 APK 文件或者 aar 文件。

  • 如果是 APK 文件,解压后的目录中直接包含所有的 DEX 文件。
  • 如果是 aar 文件,解压后的目录中只有 class.jar 文件,需要把 class.jar 文件转为 DEX 文件。可以使用 Android SDK 中的 dex 工具进行转换:
dx --dex --verbose --no-strict --output=classes.jar.dex classes.jar

需要在 dx 文件目录下执行命令,否则会报找不到 dx 命令的错误。
例如我的 dx 文件目录是:~/Library/Android/sdk/build-tools/28.0.3/dx

获取 dex-method-counts 工程

从 GitHub 上获取 dex-method-counts 工程源码,地址:https://github.com/mihaip/dex-method-counts

统计方法数

获取 dex-method-counts 工程源码之后,进入 dex-method-counts 工程源码根目录。
执行 ./gradlew assemble 命令,编译工程:

./gradlew assemble

编译成功之后,会输出以下信息:

Starting a Gradle Daemon (subsequent builds will be faster)
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:startScripts
:distTar
:distZip
:assemble

BUILD SUCCESSFUL

接着,把之前获取到的 DEX 文件(例如我的 DEX 文件是:classes.jar.dex)拷贝到 dex-method-counts 工程源码根目录。
然后,执行统计方法数的命令:

./dex-method-counts classes.jar.dex

输出信息如下:

Processing classes.jar.dex
Read in 23 method IDs.
<root>: 23
    com: 21
        xy: 21
            android: 21
                common: 21
    java: 2
        lang: 2
Overall method count: 23

根据输出信息,得出 DEX 文件中包含 23 个方法。

参考

Android方法数统计
Android方法数统计
dex-method-counts