Can i have the count of all methods used in a jar file . My APK uses certain external JARS and there are a number of classes around hundred to be precise.
I have used decompilers like dex2jar JAD and others to name a few ,but they all seem to show methods only in particular class file.
Is there a way i can get a total count ?
this is a very simple and useful tool for windows. A simple exe file you click on, give it a directory to search in, a class name and it will find the jar file that contains that class.
You can convert the jar to a dex file, and then pull the number of method references out of the header. It is stored as an unsigned little endian integer, at offset 88 (0x58).
dx --dex --output=temp.dex orig.jar cat temp.dex | head -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"'
Keep in mind that this is the number of unique methods referenced, not the number of method references. In other words, if a particular method is referenced twice in the dex file, it will only be counted once in the count in the header. And when you import this jar into your apk, the method references that are common between the two are deduplicated, so the total method reference count of the final merged apk will be <= the sum of the two.
This gradle plugin https://github.com/KeepSafe/dexcount-gradle-plugin will show you the total method count after assembling and also generates a report with the method count of each package. Which after being sorted looks like this:
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 ...
In combination with the gradle command
.\gradlew app:dependencies
which prints out the dependency tree you will get a good overview of which dependency needs how many methods.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With