有没有办法获取jar文件中使用的数字方法的计数
我可以计算jar文件中使用的所有方法吗?我的APK使用某些外部JARS,确切地说,有许多类大约一百个。
我使用过像dex2jar JAD这样的反编译器和其他反编译器,但它们似乎都只在特定的类文件中显示方法。
有没有办法得到一个总数?
我可以计算jar文件中使用的所有方法吗?我的APK使用某些外部JARS,确切地说,有许多类大约一百个。
我使用过像dex2jar JAD这样的反编译器和其他反编译器,但它们似乎都只在特定的类文件中显示方法。
有没有办法得到一个总数?
您可以将 jar 转换为 dex 文件,然后从标头中提取方法引用的数量。它被存储为无符号小端整数,偏移量为 88 (0x58)。
dx --dex --output=temp.dex orig.jar
cat temp.dex | head -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"'
请记住,这是引用的唯一方法的数量,而不是方法引用的数量。换句话说,如果在 dex 文件中引用了两次特定方法,则该方法在标头的计数中只会被计数一次。当您将此jar导入apk时,两者之间通用的方法引用将被重复数据删除,因此最终合并的apk的总方法引用计数将为<=两者的总和。
这个 gradle 插件 https://github.com/KeepSafe/dexcount-gradle-plugin 将显示组装后的总方法计数,并生成一个包含每个包的方法计数的报告。排序后看起来像这样:
30145 com
27704 org
20950 android
17140 org.spongycastle
16605 android.support
9760 com.google
8930 com.fasterxml.jackson
8930 com.fasterxml
8633 android.support.v4
7020 com.fasterxml.jackson.databind
6426 android.support.v7
5311 com.google.protobuf
4705 org.spongycastle.crypto
...
与 gradle 命令结合使用
.\gradlew app:dependencies
它打印出依赖关系树,您将获得哪些依赖关系需要多少种方法的良好概述。